本番環境でライブラリファイルをロードする 質問する

本番環境でライブラリファイルをロードする 質問する

私は自分のアプリの1つをRails 4.2.6からRails 5.0.0にアップグレードしました。アップグレードガイド自動ロード機能は、本番環境ではデフォルトで無効になっているとのことです。

ファイル内の自動ロードを使用してすべての lib ファイルをロードするため、実稼働サーバーで常にエラーが発生しますapplication.rb

module MyApp
    class Application < Rails::Application
        config.autoload_paths += %W( lib/ )
    end
end

config.enable_dependency_loading今のところ、を設定しましたtrueが、これに対するより良い解決策があるかどうか疑問に思っています。本番環境ではデフォルトで自動読み込みが無効になっているのには理由があるはずです。

ベストアンサー1

Rails 5 に移行した後の変更点のリスト:

  1. アプリ内のすべてのコードlibapp自動ロード開発中および熱心なプロダクションで最も重要なことは自動リロード開発中なので、変更を加えるたびにサーバーを再起動する必要はありません。
  2. require内部の独自のクラスを指すステートメントはすべて削除してくださいlib。ファイル/ディレクトリ名が正しい場合は、いずれにしてもすべて自動ロードされるためですrequire。ステートメントを残しておくと、自動再ロードが中断される可能性があります。詳細情報ここ
  3. config.eager_load = trueすべての環境で設定して、開発時にコードの読み込みの問題を積極的に確認します。
  4. Rails.application.eager_load!「循環依存」エラーを回避するために、スレッドを操作する前に使用してください。
  5. ruby/rails 拡張機能がある場合は、そのコードを古いlibディレクトリ内に残し、初期化子から手動でロードします。これにより、拡張機能が、それに依存する可能性のある他のロジックの前にロードされるようになります。

    # config/initializers/extensions.rb
    Dir["#{Rails.root}/lib/ruby_ext/*.rb"].each { |file| require file }
    Dir["#{Rails.root}/lib/rails_ext/*.rb"].each { |file| require file }
    

おすすめ記事