【问题标题】:RVM / Heroku / Gem: lazy symbol binding failedRVM / Heroku / Gem:惰性符号绑定失败
【发布时间】:2013-02-16 06:24:51
【问题描述】:

我无法完成这项工作:

apaw:x apaw$ heroku db:pull

dyld: lazy symbol binding failed: Symbol not found: _rb_intern2
  Referenced from: /Users/apaw/.rvm/gems/ruby-1.9.3-p385/gems/sqlite3-ruby-1.3.2/lib/sqlite3/sqlite3_native.bundle
  Expected in: flat namespace

dyld: Symbol not found: _rb_intern2
  Referenced from: /Users/apaw/.rvm/gems/ruby-1.9.3-p385/gems/sqlite3-ruby-1.3.2/lib/sqlite3/sqlite3_native.bundle
  Expected in: flat namespace

我尝试了不同的 sqlite3 gem 版本,但都失败了。

在我通过 rvm 安装 ruby​​-1.9.3-p385 之前它运行良好

【问题讨论】:

  • 尝试:rvm gemset clean 并再次安装所有 gem
  • 您能否澄清一下您正在使用 Heroku Postgres,而不是尝试远程使用 sqlite?

标签: ruby sqlite heroku gem rvm


【解决方案1】:

这可能不是您想要的答案,但我相信这是您需要的答案。

首先,假设您使用的是 Heroku Postgres,您确实应该在本地使用 Postgres 以实现开发/生产平价。您的开发和部署环境之间的对等性可以防止由于环境之间的差异而引入细微的错误。 RVM、捆绑器等。人。努力在其他领域实现这一目标;我恳请您对您的数据库这样做。理论上,适配器抽象出支持服务(数据库、缓存系统)中的任何差异。实际上,支持服务之间的差异意味着会出现微小的不兼容性,从而导致在开发中工作并通过测试的代码在生产中失败。

其次,db:pull/push 命令已被弃用,您应该改用pgbackups:capture/restore。有关更多信息,请参阅Importing and Exporting Heroku Postgres Databases with PG Backupsdb:pull 在处理不同的后端(postgres 远程,sqlite3 本地)时非常糟糕。您上面的错误就是一个很好的例子。虽然使用 pgbackups 可以说是更多的步骤,但它更安全可靠,并且对脚本来说应该是微不足道的。

【讨论】:

  • 这个这个这个。不要在本地使用 sqlite,不要使用 db:push/pull。
【解决方案2】:

SQLite 在平台上明确不支持,因为文件系统是ephemeral。一旦您重新启动测功机,您写入 sqlite 数据库的内容就会消失。请改用heroku postgres

如果您仍然希望这样做,您可以 fork ruby buildpack 并更改它,以便将 sqlite3 库文件捆绑到您的应用程序中。创建自定义构建包的文档是here

【讨论】:

  • 我不认为它不受支持 - 它只是没有在那个 ruby​​ 上测试过 - 有人应该为这个问题打开一个错误报告
  • 不,我在这里工作,我们不支持它,文件系统访问是短暂的。重新启动应用程序后,您写入数据库的任何内容都会消失。毫无疑问,它是否是一个好的解决方案,它不是。
  • 我不相信 OP 正在谈论远程使用 SQLite
【解决方案3】:

我已经通过卸载 heroku 工具带并安装 heroku gem 来做到这一点。

谢谢大家的指点

【讨论】:

  • 不推荐使用 heroku gem,您应该使用 Toolbelt 和 pgbackups 来完成这些任务。您当前的工作流程最终会中断。
  • 另外,请务必切换到 ruby​​1.9.2-p290 来执行此操作(在撰写本文时):link
猜你喜欢
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2011-12-06
  • 1970-01-01
相关资源
最近更新 更多