【问题标题】:Include Rake tasks from a gem into my engine将 gem 中的 Rake 任务包含到我的引擎中
【发布时间】:2012-12-26 17:37:04
【问题描述】:

我正在创建一个 Rails 引擎,并在其中编写了一些 rake 任务。我的 rake 任务在 3rd-party gem 中调用 rake 任务,我已将其作为依赖项包含在我的 gemspec 中。

当我尝试运行我的 rake 任务时,它失败并指出它无法从 3rd 方 gem 中找到任务。考虑到Rake -T 显示的是我的任务,而不是第 3 方的任务,这是有道理的。

如果我在我的应用程序 gemfile 中包含第 3 方 gem,一切都很完美,但我不想这样做。

我猜我需要在我的引擎的 rake_tasks do 块中添加另一个包含,但不知道要包含什么。我尝试了多种路径,但似乎都没有奏效。

【问题讨论】:

  • 你能解决这个问题吗?

标签: ruby-on-rails ruby gem rake rails-engines


【解决方案1】:
# lib/my_gem.rb
module MyGem
  ROOT_PATH = File.expand_path "../../", __FILE__
  # :: before of the module name it is not to encapsulate the module "My Gem"
  module ::Rails
    class Application
      rake_tasks do
        Dir[File.join(ROOT_PATH, "/lib/tasks/", "**/*.rake")].each do |file|
          load file
        end
      end
    end
  end
end

【讨论】:

    【解决方案2】:

    听起来您的第三方 gem 可能没有设置 railtie。来自 gem 的 rake 任务不会自动包含在 Rails 应用程序中。这里有两个很好的资源可以帮助解释如何设置 Rail tie,您可以从中创建一些代码来手动包含第三方 gem 的 rake 任务:

    including rake tasks in gems

    http://blog.nathanhumbert.com/2010/02/rails-3-loading-rake-tasks-from-gem.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多