Heroku db:pull Taps Load Error: ロードするファイルがありません – pg
概要
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 の両方を含むすべての正しい gem を持っています。また、タップと heroku gem をアンインストール、再インストール、更新し、それらを含めたり含めなかったりしています。私は Rails 3.2.6 を実行しています)。
「タイム ゾーン ディスプレイスメント」エラーを引き起こす既知のバグがあります。つまり、taps gem を使用すると heroku db:push が機能しないという既知のバグがありますが、この問題に直接対処する SO 投稿は見たことがありません。
解決策
Taps は、postgres インスタンス間でデータを移行するときに使用する推奨ツールではなくなりました。代わりに、heroku-pg-transfer を試してみてください。
これは、運用データベースのいずれか、または新しい Heroku postgres dev または基本プランを使用している場合にのみ機能します。まだ古い共有データベース プランを使用している場合は、新しい開発プランに切り替えることをお勧めします。
まず、Heraku でデータベースの URL を見つけます。
$ heroku config:get DATABASE_URL
postgres://yada:[email protected]:5432/123
次に、heroku データベースからローカル データベースに転送します。
$ 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 データベースを移行する」