1

我无法完成这项工作:

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 之前它运行良好

4

3 回答 3

4

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

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

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

于 2013-03-05T17:16:11.370 回答
3

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

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

于 2013-03-06T20:50:29.620 回答
2

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

谢谢大家的提示

于 2013-03-09T17:37:42.727 回答