Techioz Blog

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 データベースを移行する」