herokuへpushするためにGemfile.lock必要だけどクロス開発環境なのでlockファイルをcommitしたくない場合


長い題名だけどやりたいことは標記の通りです。

bundle install するとローカルに適応したGemfile.lockが作られるため
クロス開発環境の場合、Gemfile.lockまでcommitしてしまうと都合が悪く、あえて ignoreしています。
その状態でherokuへデプロイする際、Gemfile.lockがリポジトリに存在しないことが原因でエラーになるため今回の手順を試しました。

>git push heroku master
Username for 'https://git.heroku.com':
Password for 'https://git.heroku.com':
Counting objects: 297, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (279/279), done.
Writing objects: 100% (297/297), 198.96 KiB | 0 bytes/s, done.
Total 297 (delta 109), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/NoLockfile
remote:  !
remote:  !     Gemfile.lock required. Please check it in.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to frozen-inlet-xxxxxx
remote:
To https://git.heroku.com/frozen-inlet-xxxxxxx.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/frozen-inlet-xxxxxx.git'

環境

  • Windows7でコーディング
  • virtualbox(ubuntu)開発環境でdeploy確認
  • Windows7→herokuへdeploy
  • gem install heroku実施済み
  • bundle install 済み

手順

  • heroku用ブランチを切る

.gitigonreにGemfile.lockを記載しているならコメントアウトしてください。

"for_heroku" というブランチ名でブランチを作って移動します。

$ cd <to_app_dir_path>/
$ git checkout master
$ git checkout -b for_heroku
$ git add Gemfile.lock && git commit -m "add Gemfile.lock for heroku."
  • ブランチ指定してherokuへpush
$ git push heroku for_heroku:master
  • ブラウザで確認 できた!

参考