- 最終更新日:2016年07月23日
記事概要
Rails4.2.5からRails5.0.0にアップグレードしたら、既存バッチが動かなくなりました。
そのエラーの修正方法を記述した記事です。
環境
- rails5.0.0 & centos6.5
- ruby2.3.0
- rbenv
- unicorn
- whenever
事象
Rails4.2.5からRails5.0.0へのアップグレードで、バッチが動かなくなりました。
バッチは、
{project_folder}/lib/task
に配置して、config/application.rbに
# bacth config.autoload_paths += Dir["#{config.root}/lib"]
を記載して、クラスをオートロードしてwheneverで動かしていました。
原因
Rails5.0.0では、production environmentでboot後にautoloadingが行われなくなったためです。
こちらのgitログに変更コードとコメントが記載されています。
Autoloading of classes is now disabled in production environment by default.
If your code is dependent on autoloading in production,
then you can opt out by setting `Rails.application.config.enable_dependency_loading` to true.
訳すと、
クラスのAutoloadingは、今、本番環境ではデフォルトで利用できません。
もし、アプリでAutoloadingを有効にしたいのなら、Rails.application.config.enable_dependency_loading = true
を設定してください。
なので、本番でオートロードでバッチを動かすためには、config.enable_dependency_loading = trueの設定が必要になります。
修正方法
config/environments/production.rbに以下の処理を追加します。
# autoloading config.enable_dependency_loading = true
これでオートロードが可能になり、バッチが利用できます。
まとめ
今回のRails5.0.0の変更では、config.enable_dependency_loading = trueにする必要があるのは本番環境のみです。開発環境では、設定なしで動作します。
この変更は、最低の改悪だと思うのですが、どうしようもありません。
私の環境と同じように、オートロードでバッチを利用している場合は、設定ファイルを変更して対応してください。
以上です。
0 件のコメント:
コメントを投稿