【问题标题】:Dependencies are apparently not loading correctly after upgrade to Rails 3.1升级到 Rails 3.1 后,依赖项显然没有正确加载
【发布时间】:2011-09-10 04:04:15
【问题描述】:

我正在将使用 Devise 进行身份验证的 Rails 3 项目升级到 Rails 3.1 可挂载引擎。升级后,Devise似乎没有正确初始化,引发NameError

uninitialized constant Devise (NameError)

This issue from 2010,暗示在常规应用程序环境之外使用 Devise 时不兼容:

可能当您不单独运行它时,不需要设计。

This more recent issue 确实涉及到细节,但这与我的实际问题无关(也许还没有)。

我不太明白它的来源。我的很多依赖项,比如 CanCan 和 Compass,在升级后开始在启动时给我错误。他们都是method missinguninitialized constant等等。我借此机会消除它们或用更现代的替代品代替它们。也许我不应该。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-3.1 rails-engines


    【解决方案1】:

    通过在我的引擎模块定义之前明确要求我的依赖项解决了这个问题。

    require 'devise'
    

    【讨论】:

    • 事实上,这正是您编写大多数 Ruby 程序的方式。
    • @Justice,我希望 Rails 能为我做这件事。是的,我被宠坏了。 :( 显然,引擎不喜欢幕后 Bundler.require 的魔力。
    • 如果您的 .gemspec 声明了对 devisecancancompass 等的依赖项,那么 Rubygems 和 Bundler 可能会为您执行此操作。但 Rails 不会。如果您正在编写一个库,则绝对必须 在所有情况下都在您的.gemspec 中声明您的依赖项,并且您绝对必须 require 您的依赖项在使用之前。
    猜你喜欢
    • 2020-05-21
    • 2018-09-14
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多