LoginSignup
6
1

Railsバージョンを5.2.8→7.0.6へ上げたときにスクリプト系が動かなくなった件

Last updated at Posted at 2023-08-30

どうもこんにちは、今回はRuby on Railsのバージョンアップ作業を行なった時にぶつかった壁について紹介します。

基本的な手順

基本的な手順は、こちらの記事を参照して行いました。

バージョンアップの経緯

私の会社では、WebアプリケーションをAWS ElasticBeanstalkを使用してデプロイ/運用を行っています。

しかし、近々ElasticBeanstalkのRails5系のサポートが終了するとの警告があり、「これはバージョンを上げないとやばい!」ということで上げることになりました。

ぶつかったこと

バージョンアップ作業自体は順調でした。RSpecやRubycop、Brakemanを導入していたおかげエラー箇所や冗長なコードを見つけるのがかなり容易でした。しかし、そのような自動テストではカバーできない問題に陥ってしまいました。

それが、Javascript、CoffeeScriptが動かない! という問題です。

厳密にいうと、動かないという問題だけで2種類の問題がありました。

  1. Rails7.0.6へ上げた後にrails sでサーバーを立ち上げたら、Javascript、CoffeeScriptが全く動かないという問題。
  2. Rails5.2.8時点で実装していたJavascript、CoffeeScriptは動くが、Rails7.0.6時点でJavascript、CoffeeScriptを修正しても修正内容がlocalhost上に反映されないという問題

1つ目は簡単でした。JavaScriptのハンドリングには、Rails5ではsprocketsが、Rails7ではimportmapが使用されていました。これでは、Rails7でJavascript、CoffeeScriptが動く訳ないですね。なので、Gemにsprockets-railsを導入することにしました。

1. Gemfileに`gem 'sprockets-rails'`を記載
2. `bundle install`を実行
3. 念の為、もう一度`rails s`を叩く

これでJavascript、CoffeeScriptが動き始めました。

しかし問題は2つ目です。

エラーも出ず、ただただconsole.logでログ出力されないという問題が目の前にあるだけ。これはなんだろうと思い、調査をしました。そしたら、設定が足りないという凡ミスでした。

  1. config/application.rbrequire "sprockets/railtie"を記述
  2. config/initializers/assets.rbに以下を記述
Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'javascripts')
Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'coffeescripts')

あとはもう一度rails sを叩けばOKです!

うまくいかなかった場合

  • app/assets/javascripts/application.js//= require usersというようにrequireする記述をスクリプトファイルの数だけ追加してみてください。
  • public/assetsディレクトリをクリアして、rails assets:precompileを実行してみてください。

まとめ

Ruby/RailsのアップグレードではJavaScript周りの作りは複雑なので、根気強く調査して頑張る!

バージョンアップ作業で困っている方をお助けできてたら嬉しいです。

以上

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1