2011-01-30 11 views
2

私はlibフォルダにあるモジュールを作成しました。を含むモジュールが開発で動作し、運用環境での起動時に失敗しますか?

# Load the rails application 
require File.expand_path('../application', __FILE__) 

# Initialize the rails application 
MyProject::Application.initialize! 

ActiveRecord::Base.send :include, MyProject::Has::Formatter 
include MyProject::EventFormatters 

を次のように私は私のenvironment.rbファイルにそれを置くことによって、起動時にそれを含めよ。これは、開発中の素晴らしい作品が、私は本番モードで実行しようとしたり、私は生産に私のアプリを展開する場合、私は、次のスタックを取得する場合

=> Booting WEBrick 
=> Rails 3.0.3 application starting in production on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
Exiting 
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in `method_missing': undefined local variable or method `has_formatter' for #<Class:0x808f830> (NameError) 
     from C:/Data/myproject/app/models/event.rb:2 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:227:in `load_dependency' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:346:in `require_or_load' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:300:in `depend_on' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:216:in `require_dependency' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:138:in `eager_load!' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:137:in `each' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:137:in `eager_load!' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:135:in `each' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:135:in `eager_load!' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:108:in `eager_load!' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application/finisher.rb:41 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/initializable.rb:25:in `instance_exec' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/initializable.rb:25:in `run' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/initializable.rb:50:in `run_initializers' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/initializable.rb:49:in `each' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/initializable.rb:49:in `run_initializers' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:134:in `initialize!' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:77:in `send' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing' 
     from C:/Data/myproject/config/environment.rb:5 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225:in `load_dependency' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:596:in `new_constants_in' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:225:in `load_dependency' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require' 
     from C:/Data/myproject/config.ru:3 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval' 
     from C:/Ruby187/lib/ruby/gems/1.8/gems/rack-1.2.1/lib/rack/builder.rb:46:in `initialize' 
     from C:/Data/myproject/config.ru:1:in `new' 
     from C:/Data/myproject/config.ru:1 

を今ここで最も心が全部の遠くなるような一部です::私はconfig/environments/production.rbconfig.cache_classes = falseを設定した場合、私はそのスタックトレースを取得しないとアプリが同じ動作をサーバが起動しようとしたときにトレース生産モードではdevモードを使用します。

config.cache_classes = falseの設定では、このような方法でモジュールを運用するとどうなりますか?私は間違った/奇妙な方法でモジュールを含んでいますか?

開発で

は、すべてのクラスがロードされた怠惰です:私は完全だ

答えて

4

希望は、右、私は、少なくとも私の視点を提示します。これにより、必要なときにのみ読み込まれるので、簡単に変更できます。 その後が含まれ

ActiveRecord::Base.send :include, MyProject::Has::Formatter 
include MyProject::EventFormatters 

が、それは全部の作業を行います

MyProject::Application.initialize! 

が必要ですないロード・モジュールのコンテンツを行います。これは、ことを意味します。

実際には、モジュールとクラスは本当にロードされている=>クラッシュ、それらは依存関係が必要です!

その結果、置く:あなたはconfig/initializersで作成する初期化子で

ActiveRecord::Base.send :include, MyProject::Has::Formatter 
include MyProject::EventFormatters 

を例えばactive_record_extension.rbそれを呼び出します。

0

ご使用のシナリオで自動ロードが機能しませんか?

# config/application.rb 
config.autoload_paths += %W(#{config.root}/lib) 

# lib/my_project/event_formatters.rb 
module MyProject 
    module EventFormatters 
    # .. etc. ... 
    end 
end 
関連する問題