【问题标题】:Gem dependencies with Rails 3 engine fail in initializer与 Rails 3 引擎的 Gem 依赖项在初始化程序中失败
【发布时间】:2010-11-25 06:27:42
【问题描述】:

tldr;当我在使用引擎的测试应用程序中运行 rake 任务时,引擎依赖项似乎没有得到尊重。我必须通过在测试应用的 Gemfile 中指定依赖项来 (-D)RY

我使用 Jeweler 创建了一个 Rails 引擎作为宝石。它依赖于我在 Rakefile 中指定的设计:

gem.add_runtime_dependency 'devise', '~> 1.1.3'

在我的测试应用程序中,我将 Engine 依赖项添加到 Gemfile,bundle install 显示 Devise 已被拾取并安装。但是,如果我运行初始 rake db:migrate,则会引发错误:

uninitialized constant Devise
<snip>config/initializers/devise.rb:3

如果我手动将 Devise 依赖项添加到测试应用程序的 Gemfile 中,它就可以工作。我可能遗漏了一些明显的东西,但在这个阶段,测试应用程序似乎正确地拾取并安装了依赖项,但由于某种原因,初始化程序代码失败,除非在测试应用程序的 Gemfile 中再次列出了依赖项。

【问题讨论】:

    标签: ruby-on-rails-3 gem bundler


    【解决方案1】:

    您可能已经找到了解决方案或解决方法,但我会说明我是如何解决这个问题的,以防有人遇到同样的问题。

    简单地说:

    require 'devise'
    

    在 lib/my_gem.rb 中。

    Rails 会自动加载 Gemfile 中指定的 gem,仅此而已。如果您正在开发具有依赖项的 gem,则必须手动要求它们。

    【讨论】:

    • 是的,我就是这么做的。我只是不知道 Rakefile / .gemspec / Gemfile 的作用是什么,但是 Yehuda 的出色帖子 Clarifying the Roles of the .gemspec and Gemfile 清除了一切!
    • @justsee:感谢您的链接,gem 开发一开始可能会很模糊,但这样的帖子有助于消除混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多