Rails Tutorialを第5章まで進めた時、今更ながらHerokuにデプロイできていなかったことに気付き、そこからハマりにはまったので書き残します。
状況
remote: -----> Detecting rake tasks
remote: sh: 2: Syntax error: Unterminated quoted string
remote: sh: 2: Syntax error: Unterminated quoted string
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against you
r app
remote: ! and using the production group of your Gemfile.
remote: ! rake aborted!
remote: ! NoMethodError: undefined method `web_console' for #<Rails::Application::Configuration:0x00000000>
何度デプロイを試みてもこんな感じでエラーになる。
原因と対処
原因1 gemのweb_console
自分ではいじっていない部分だったので、戸惑いと「見慣れない部分は見たくない」と思って目をそらしていましたが・・・
このエラーはRailsをproduction環境で動かす時に出ることがあるようで、Gemパッケージのweb_consoleに関する設定がconfig/application.rb
や、config/initializers
ディレクトリ内に記述されている場合に起こります。
私の場合は
class Application < Rails::Application
config.web_console.development_only = false
end
となっていました。
通常、Gemfileではweb_consoleをproduction環境で使用しないよう設定されているためにここでエラーが発生するとのこと。
対処
上記のようなディレクトリやファイルにあるweb_consoleの設定に関する記述を、config/environments/development.rb
に移動します。
Rails.application.configure do
config.web_console.development_only = false
end
原因2 コミットしてない
こちらはいかに私がGitやHerokuについて理解していないかですが・・・
原因1の対処はしていたのに何度デプロイしても失敗したので、一時「これが原因じゃなかったのか」と思っていました。
でももっと根本的なこと。コードを変更したままコミットせずに$git push heroku master
をしていたのです。
対処
対処も何もないのですが・・・
$git commit -am "hogehoge"
$git push
$git push heroku master
まとめ
以上でやっとのことデプロイできました。
「見たくない」とか、コミットしてないってとこでかなり無駄な時間を費やしてしまいました・・・
でも未だ理解は不十分です。コミットしただけで良いのか、それともリモートへのpushも必要なのかわかっていません。
今はRailsを覚えることに集中しているので、チュートリアルが終わったらこちらの仕組みについてもきちんと勉強したいです。
参考にさせていただきました。
原因1
https://www.oiax.jp/books/rails4book/undefined_method_web_console.html
原因2
http://koulog.hatenablog.com/entry/2015/11/19/090000