rake资产期间未初始化的常量:lib类的预编译

时间:2012-09-06 16:17:17

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

Rails 3.2.2

运行rake资产时:预编译我收到以下错误:

uninitialized constant Redirect

Redirect是一个自定义中间件类,可将裸域请求从mydomain.com重定向到www.mydomain.com。

我使用以下命令在production.rb中加载中间件:

config.middleware.use Redirect

redirect.rb位于lib / middleware / redirect.rb。我使用:

在application.rb中加载路径
config.autoload_paths += %W(#{config.root}/lib/middleware)

运行应用程序时工作正常,其他rake任务运行正常。但是运行rake资产:预编译似乎没有正确加载lib。我首先注意到在Heroku上运行的问题,但我能够在本地重现没问题。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

您可能已将config.assets.initialize_on_precompile = false设置在某处。

在设置与Heroku相关的配置后,我遇到了此错误。要解决此问题,我只需require "#{Rails.root}/lib/my_middleware.rb"就在我配置应用程序以使用中间件的行上方。

答案 1 :(得分:0)

我从/ lib加载一个类并将其分配给::GLOBAL变量时遇到了同样的错误。

这是因为我忘记将它放在after_initialize区块内,这就是我在开发过程中的做法。

config.after_initialize do
  ::GLOBAL = MyLib::MyClass.new
end

希望这有助于某人!