41
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Heroku へ初デプロイで引っかかった bundle install

rails Tutorial 『1.5 デプロイする』でやってしまったエラーの記録です。
こんなに丁寧にエラー出してくれるんだ…とちょっと感動しましたが、それは解決できてからですね。

『1.5.1 Herokuのセットアップ』で 本番環境用にgem を追記しましたが、本番用なので開発環境で実行が必要とは思っていませんでした。

リスト1.14で追加したgemは本番環境でしか使用しないので、このフラグを追加したコマンドを実行すると本番用gemはローカルに追加されません。今このコマンドを実行するのは、後の本番環境へのデプロイに備えてGemfile.lockを更新し、pg gemとrails_12factor gem、Rubyバージョンの指定をGemfile.lockに反映する必要があるためです。

後で見直すと「書いてる!」と気づくのですが、エラー出てからでないとこの意味に気づけませんでした。。。
なので、以下のコマンドを実行せずにチュートリアルの後のコマンドを入力していきました。

$ bundle install --without production

  
すると、

 $ git push heroku master

で、

remote: You have added to the Gemfile:
remote: * pg (= 0.17.1)
remote: * rails_12factor (= 0.0.2)
remote: !
remote: ! Failed to install gems via Bundler.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to whispering-beyond-xxxxx.
remote:

とエラーを出して止まります。
ここで 「Failed to install gems via Bundler.」 を見て、さっき見た「bundle install ~」は実行が必要だったのかも…と気づきました。

$ bundle install --without production

を実行して、

$ git commit -a -m "Update gemfile.lock for heroku"
$ heroku create
$ git push heroku master

これでようやく Heroku 上で動いている「Hello, world!」を見ることができました。
新しく heroku create しちゃったので、前の失敗 apps が残ってしまいました。
上書きするコマンドを探すべきでした。。。
削除するのはHerokuのアプリをターミナルで削除するを参考にコマンドで削除しました。

$ heroku apps:destroy --app アプリ名 --confirm アプリ名

  

Bundlerを使ったGemパッケージの管理 に以下のような記述がありました。

先に記載したように「bundle install」を行なうと、「Gemfile」に書かれたGemパッケージと、そのGemパッケージが依存しているGemパッケージを自動的に調べて全てインストールしてくれます。「Gemfile.lock」はインストールされたGemパッケージの名前とバージョンが記録されたものです。
----- 中略 -----
他の環境で同じアプリケーションの開発を行なう場合は、プログラムファイルに加えてこの「Gemfile.lock」ファイルを配布します。そして他の環境で「bundle install」を実行すると、今度は「Gemfile.lock」ファイルが参照され、指定されたバージョンのGemパッケージがインストールされます。
このようにBundlerを使うことで、必要なGemパッケージを管理し、同じ開発環境を簡単に構築することができます。

なるほど。
Gemfile と Gemfile.lock の関係性がわかってなかったから、bundle install の実行が必要だと認識できなかったんですね。

  

まとめ

・ Gemfile を変更したら、とにかく bundle install を実行する。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
41
Help us understand the problem. What are the problem?