使用config.threadsafe时从lib /加载模块/类的正确方法是什么!选项?

Ale*_*lex 5 ruby ruby-on-rails

我一直在努力让我们的Rails 2.3.8应用程序在JRuby下正常运行.一切正常,直到我启用config.threadsafe!为了实现JRuby提供的并发性.这导致lib /中的模块和类不再自动加载.

与config.threadsafe!启用:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner'

/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant Sim::Sim200Provisioner (NameError)
    from (eval):1
Run Code Online (Sandbox Code Playgroud)

与config.threadsafe!禁用:

$ ruby script/runner -e production 'p Sim::Sim200Provisioner'
Sim::Sim200Provisioner
Run Code Online (Sandbox Code Playgroud)

有问题的文件是LIB/SIM/sim200_provisioner.rb那里SIM卡应用程序/模型/ sim.rb.Rails通常可以轻松找到并加载文件.

我是否需要手动要求我们所有的库,或者是否有更多类似Rails的方法来处理它我缺少的?

mol*_*olf 7

文件threadsafe!提到,它禁用自动加载的依赖.原因是如果两个或多个线程都认为它们仍然缺少某个类,则在加载文件期间可能存在竞争条件.

相反,你应该手动require所有你需要的文件initializer.