3

我在 lib 目录中有一个类:lib\db_cache.rb,它定义了类 DbCache。

我的 Rails 模型可以在开发模式下以及在生产模式下运行 rails 控制台时访问它。

但是当我运行生产模式 Rails 服务器时,模型类,例如 Foo,抱怨“未初始化的常量”Foo::DbCache,

org/jruby/RubyModule.java:2677:in `const_missing', 
org/jruby/RubyMethod.java:134:in `call'

我在 application.rb 中有这一行

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

我还尝试了链接的 SO 问题中显示的其他变体 - 但没有任何乐趣。

我在 Linux 上使用 jruby 1.7.3 (1.9.3p385) - Java 1.7.0_13-b20。Rails 是 3.2.12 版本。

我已经看到这些问题Rails - 为什么 RAILS_ROOT/lib 中的模型在生产模式下不可用?以及从 Rails 3 中的 lib 文件夹加载模块/类的最佳方法?但这似乎对我的情况没有帮助。

提前感谢您对此的任何想法。

PS我现在的解决方法是在我的模型类中要求'db_cache':(

4

2 回答 2

1

听起来您正在尝试扩展一个类。如果没有看到 db_cache.rb 文件,我无法确定。

如果是这样的话,那就太好了

extend DbCache

在您的模型类定义中

于 2013-06-20T01:30:42.070 回答
0

该问题似乎与启用 config.threadsafe 相关!在 /config/environments/production.rb

这就是我所拥有的:

  # Enable threaded mode
  if defined?(Rails::Server)
    puts "Rails Server running - so enable threadsafe!"
    config.threadsafe!
  end

当我使用 jruby 时,我认为这不是什么大问题。至少,当我删除这些行时,事情会变得更好:)

于 2013-06-20T17:54:23.030 回答