我在使用 ruby 1.9.2-p320 和 Heroku 的 Taps 时使用"db"命令时遇到以下错误,例如:
heroku db:pull --app my-app
这会产生以下错误:
Taps Load Error: no such file to load -- sqlite3
-或-
Taps Load Error: no such file to load -- pg
(是的,顺便说一句,我拥有所有正确的宝石,包括 postgres(在本地运行良好)和 sqlite3,以及卸载、重新安装和更新 taps 和 heroku 宝石并包含它们以及不包括它们在我的 Gemfile 中。 我正在运行 Rails 3.2.6)
尽管有一个已知的错误会导致"时区位移"错误:heroku db:push 不起作用,使用 taps gem,但我还没有看到任何直接解决此问题的 SO 帖子。
在 postgres 实例之间迁移数据时,不再推荐使用 Taps 的工具。请给 heroku-pg-transfer 一个尝试。
这仅在您使用生产数据库之一或新的 Heroku postgres 开发或基本计划时才有效。如果您仍在使用较旧的共享数据库计划,我建议您切换到新的开发计划。
首先,在 Heroku 上找到您的数据库的 URL:
$ heroku config:get DATABASE_URL
postgres://yada:yada@ec2-107-21-122-141.compute-1.amazonaws.com:5432/123
然后从 heroku db 传输到您的本地数据库:
$ heroku plugins:install https://github.com/ddollar/heroku-pg-transfer
$ heroku pg:transfer -t postgres://localhost/dbname -f postgres://yada:yada@ec2.../123
由于heroku-pg-transfer工具利用了postgres的原生pg_dump工具,因此它是一个更具可预测性和弹性的工具。
我在这里写了更多关于它的文章:使用 heroku pg:transfer 迁移 Postres 数据库
我的解决方案是将taps gem和sqlite3 gem(即使我不在应用程序中的任何地方使用sqlite)添加到gemfile(正在开发中)。
我找到的解决方案,使用 https://github.com/ricardochimal/taps/issues/92 的提示在这里详细介绍:https://github.com/ricardochimal/taps/issues/92#issuecomment-6486535
简而言之,据我所知,红宝石 1.9.2-p320 似乎是问题所在。 降级到 ruby 1.9.2-p290 为我修复了它。 这可能与上面链接中提到的 ruby 1.9.3 问题有关,不确定。
如果你仍然坚持使用Taps,请在GH上看到这条评论,因为海报doshea似乎比我或jfeust更彻底地研究了它。
我还要在这里重申,如果你不需要Taps,那么heroku-pgtransfer就是你的朋友。 在这里查看Ryan对我问题的回答以及他关于使用新工具的优秀博客文章。
根据@likethesky,您可以降级。或者,只是
~/.rvm/bin/ruby-1.9.2-p320 /usr/bin/heroku db:push
当然,这需要安装 p320 并安装水龙头和 sqllite3 gem。很容易到位。