【问题标题】:uninitialized constant during rake assets:precompile for lib classrake 资产期间未初始化的常量:lib 类的预编译
【发布时间】:2012-09-06 16:17:17
【问题描述】:

Rails 3.2.2

运行 rake assets:precompile 时出现以下错误:

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 assets:precompile 似乎无法正确加载库。我首先注意到在 Heroku 上运行的问题,但我已经能够在本地重现没有问题。

有什么想法吗?谢谢!

【问题讨论】:

  • 所以,这只是一种变通方法,但我决定只捕获 production.rb 中的异常,它既适用于应用程序,也适用于 assets:precompile 任务。不过,我仍然想弄清楚实际问题是什么。

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


【解决方案1】:

您可能在某处设置了config.assets.initialize_on_precompile = false

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

【讨论】:

    【解决方案2】:

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

    这是因为我忘记将它放在 after_initialize 块中,这是我在开发中所做的。

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

    希望这对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 2012-04-17
      • 2015-08-01
      • 2014-04-06
      • 2013-04-15
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多