2016年7月21日木曜日

【Rails5.0.0】 Rails4.2.5からRails5.0.0へのアップグレードでバッチが動かなくなった

  • 最終更新日: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に以下の処理を追加します。

{project_folder}/config/environments/production.rb

  # autoloading
  config.enable_dependency_loading = true

これでオートロードが可能になり、バッチが利用できます。

まとめ

今回のRails5.0.0の変更では、config.enable_dependency_loading = trueにする必要があるのは本番環境のみです。開発環境では、設定なしで動作します。
この変更は、最低の改悪だと思うのですが、どうしようもありません。
私の環境と同じように、オートロードでバッチを利用している場合は、設定ファイルを変更して対応してください。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...