2

Railsに多数の gem があると、Gemfile起動時間がかなり遅くなります。

しかし問題は、常にすべての gem をロードする必要があるわけではないということです。

  • (rake db:migrateそして友人たち) は、ActiveRecord に関係のないものを実際には必要としません (もしかしたら)。
  • rails c一方、おそらくそのほとんどが必要です。
  • おそらく、rake assets:precompileほとんど必要ありません。
  • 等。

残念ながら、initializersは gem にかなり密接にバインドされています (たとえば、simple_form が必要な場合は simple_form 構成を行う必要があるため、 で失敗しますgem 'simple_form', require: false)。

したがって、問題は、すべてのイニシャライザを遅延して実行して起動時間を改善し、それでも何も壊さない最善の方法は何かということです。

4

1 に答える 1

2

Bundlerが起動時にロードするgemを完全に制御できます。application.rbには、次のものがあります。

if defined?(Bundler)
  Bundler.require *Rails.groups(:assets => %w(development test))
end

ジェムの簡略化されたサブセットをロードするようにバンドラーに指示するために、ENV変数に反応するようにわずかに変更できます。

if defined?(Bundler)
  if ENV['RAKE_ENV']
    Bundler.require :rake
  else
    Bundler.require *Rails.groups(:assets => %w(development test))
  end
end

これで、環境変数が設定されているかどうかを確認することで、初期化子を切り替えることができます。

Gemfileで、「開発」および「テスト」グループを作成するのと同じ方法で、「rake」と呼ばれるグループを作成する必要があります。

于 2012-10-08T04:47:34.817 に答える