TL;DR;
悲劇は突然に
簡易的なアプリケーションを作成しており、ある程度、主幹機能は作り終えた。そこで、サクッとデプロイしてしまおうと思い、デプロイした。
これは、とある駆け出しプログラマーの失敗記録である。
結論を言うと、
group :development, :test do
slim-rails
end
となっており、 slimがproductionで読まれなくなっていた
と言うことでした。
これでなるほどとなる方は、この記事は読み飛ばして大丈夫です。
その他の人に向けて、少し、解説と、自分への戒めを残しておきたいと思います。
(突っ込みたい部分はたくさんあると思いますが、大目に見てくれると嬉しいです)
環境
- Rails 5.2.1
- Ruby 2.5.1
- mysql5.7
- heroku
- slim-rails
- devise( `新規登録の部分のview ファイル` をカスタマイズしている)
いつものように、 heroku create
から、 git push heroku master
の流れを順調に終えた。無事デプロイは完了したかのように思えた。
そこで、
確認のため、試しに新規登録のページを開いて見た。
ない、ない。。。。追加したはずの nickname の部分のフォームがない!!!
そう、 development環境では確かに存在していたはずのフォームが本番環境では反映されていないという状態であった。
試行錯誤
1. custom したコントローラが読まれていないのかどうか。
最初、自分はこの部分を疑った。しかしながら、サーバーログを見ると、
きちんと、
Users::RegistrationsController
と書いてあり、大丈夫そうだ。
一応、調べて見ると、意外とたくさんの記事がヒットし、同じような悩みを抱えている人も多いんだなと思いながら、色々試して見た。
1-1. config/routes.rbの記述を変更する。
これは正直効果無いだろうと思いながらも、藁にもすがる思いで試した。
具体的には、
devise_for :users, controllers: {
registrations: 'users/registrations'
}
このように変更するものである。
しかしながら、ログを見る限りでは、きちんと該当のコントローラが呼ばれているようだったので、あえなく失敗した。
1-2. config/initializers/devise.rbの設定を変更する。
こちらは Github の DeviseのIssue に上がっていたものを参考にした。
config.scoped_views = true
このように変更したが、何も起こらず、なすすべなく、途方に暮れてしまった。
2. viewの呼び出しがおかしいのか
viewの呼び出しがおかしいと言っても、判断するすべを自分は持っておらず、かなり苦戦した。
(だって、ローカルでは読まれているんだもん)
何もやることがないので、仕方なく、サーバーログを見ていると、
2018-08-17T07:01:55.395701+00:00 app[web.1]: [c9457b96-3fee-484c-a808-770f595ac942] Started GET "/users/sign_up" for 111.239.172.198 at 2018-08-17 07:01:55 +0000
2018-08-17T07:01:55.401814+00:00 app[web.1]: [c9457b96-3fee-484c-a808-770f595ac942] Processing by Users::RegistrationsController#new as HTML
2018-08-17T07:01:55.403845+00:00 app[web.1]: [c9457b96-3fee-484c-a808-770f595ac942] Rendering vendor/bundle/ruby/2.5.0/gems/devise-4.4.3/app/views/devise/registrations/new.html.erb
2018-08-17T07:01:55.456650+00:00 app[web.1]: [c9457b96-3fee-484c-a808-770f595ac942] Rendered vendor/bundle/ruby/2.5.0/gems/devise-4.4.3/app/views/devise/shared/_links.html.erb (0.3ms)
2018-08-17T07:01:55.456729+00:00 app[web.1]: [c9457b96-3fee-484c-a808-770f595ac942] Rendered vendor/bundle/ruby/2.5.0/gems/devise-4.4.3/app/views/devise/registrations/new.html.erb (52.8ms)
あれ、 .erb
??? .slim
じゃないことに少しの違和感を覚えた。
そこで、
gem 'slim-rails` # prod, dev, test 全てで読まれるように変更
してから、再度デプロイし直すと、反映された!!!
結論
- Gemfileの記述(特にgroup)には注意しよう。
- MarkUp系のGemは詰まると発見しにくい。
以上、もし、今後詰まる方がいたら、参考にして見てください。
補足
これに気が付いた経緯として、半年以上前、友人が rspec によるテストが通らないと言う経験が生きた。
ただ topページを表示するためのテスト
なのだが、テストだけが通らないと言う状況でした。
この時にも原因だったのは、
group :development do
gem 'haml-rails'
end
となっていたからであった。 やはり、環境の指定には気をつけるべきである。