【问题标题】:How do I create a rake task for a Rails engine which is not exposed to the host application?如何为未暴露给宿主应用程序的 Rails 引擎创建 rake 任务?
【发布时间】:2012-05-18 23:06:52
【问题描述】:
# lib/tasks/test.rake
task :hello do
  puts 'hello'
end

$ rake app:你好

要运行任务,我需要在它前面加上“app:”,它会在虚拟应用程序的上下文中运行。它还以rake hello 的形式暴露给宿主应用程序(即,当用作父 Rails 应用程序中的插件时)。

我想运行一个不需要 Rails 环境的 rake 任务并运行一些命令,但它是从引擎根目录而不是虚拟应用根目录运行的。

【问题讨论】:

    标签: ruby-on-rails-3 ruby-on-rails-3.1 rake ruby-on-rails-plugins


    【解决方案1】:

    我知道这有点晚了,但是对于在这里寻找正确答案的其他人,请执行以下操作:

    创建你的任务:

    # lib/tasks/your_engine_tasks.rake
    desc "Explaining what the task does"
    task :your_task do
      # Task goes here
    end
    

    然后转到你的引擎 ./Rakefile 并添加

    load 'lib/tasks/your_engine_tasks.rake'
    

    我们现在开始:

    $ rake -T
    

    给你你的任务。

    希望我能帮上忙。

    【讨论】:

    • 您需要将 :environment 添加到您的任务中:task your_task: :environment do
    【解决方案2】:

    我想更好地回答这个问题,但是我确实发现您可以在引擎的 Rakefile 中添加任务(因此 ./Rakefile 不在规范/虚拟应用程序中),如下所示:

    task :my_task do
      puts "hi!"
    end
    
    task :default => [:spec, :my_task]
    

    我希望将我的任务放在另一个文件中,但至少这提供了一种前进的方式。就我而言,我想在虚拟应用程序中运行 Konacha javascript 测试,所以我的 Rakefile 看起来像这样:

    task :spec_javascript do
      exec 'cd spec/dummy && rake konacha:run' # exec passes command return value up stack!
    end
    
    task :default => [:spec, :spec_javascript]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 2014-05-25
      • 1970-01-01
      • 2011-08-30
      • 2012-11-03
      相关资源
      最近更新 更多