Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 包括模块在开发中工作,在生产中启动时失败?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 包括模块在开发中工作,在生产中启动时失败?

Ruby on rails 包括模块在开发中工作,在生产中启动时失败?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我在lib文件夹中编写了一个模块。我在启动时将其放入我的environment.rb文件中,如下所示 # Load the rails application require File.expand_path('../application', __FILE__) # Initialize the rails application MyProject::Application.initialize! ActiveRecord::Base.send :include, MyProject::

我在
lib
文件夹中编写了一个模块。我在启动时将其放入我的
environment.rb
文件中,如下所示

# 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
这在开发中非常有效,但如果我尝试在生产模式下运行,或者如果我将应用部署到生产模式,则当服务器尝试启动时,我会得到以下堆栈跟踪:

=> 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
=>启动WEBrick
=>Rails 3.0.3应用程序在http://0.0.0.0:3000
=>使用-d调用以分离
=>Ctrl-C关闭服务器
退出
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in'method_missing':未定义的局部变量或方法'has_formatter'for#(NameError)
来自C:/Data/myproject/app/models/event.rb:2
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:227:in'load\u dependencity'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:346:in'require\u或\u load'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:300:in'dependent\u'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:216:in'require\u dependencity'
来自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'
来自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'
来自C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/engine.rb:135:in'eager_load!'
来自C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:108:in'eager_load!'
来自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'
来自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'
来自C:/Ruby187/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/application.rb:77:in'method_missing'
来自C:/Data/myproject/config/environment.rb:5
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:225:in'load\u dependencity'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:596:in'new\u constants\u in'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:225:in'load\u dependencity'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.3/lib/active\u support/dependencies.rb:239:in'require'
来自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'
来自C:/Data/myproject/config.ru:1:in'new'
来自C:/Data/myproject/config.ru:1
现在是整个过程中最令人难以置信的部分:如果我在
config/environments/production.rb
中设置
config.cache\u classes=false
,那么我就不会得到堆栈跟踪,应用程序在生产模式下的行为与在开发模式下的行为相同


如何设置
config.cache\u classes=false
使以这种方式包含模块在生产中起作用?我是否以错误/怪异的方式包含模块?

希望我完全正确,至少我会陈述我的观点:

在开发中,所有类都是延迟加载的。这样,您可以轻松地更改它们,因为它们仅在必要时加载。这意味着:

MyProject::Application.initialize!
不加载需要以下内容的模块内容:

ActiveRecord::Base.send :include, MyProject::Has::Formatter
include MyProject::EventFormatters
它包含在之后,使整个过程正常运行

在生产环境中,模块和类实际上是加载的=>crash,它们需要依赖关系

因此,提出:

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

在您在
config/initializers
中创建的初始值设定项中,将其称为
active\u record\u extension.rb

自动加载对您的场景不起作用吗

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

# lib/my_project/event_formatters.rb
module MyProject
  module EventFormatters
    # .. etc. ...
  end
end