Ruby on rails 3 如何为Rails引擎创建一个不向主机应用程序公开的rake任务?

Ruby on rails 3 如何为Rails引擎创建一个不向主机应用程序公开的rake任务?,ruby-on-rails-3,ruby-on-rails-3.1,rake,ruby-on-rails-plugins,Ruby On Rails 3,Ruby On Rails 3.1,Rake,Ruby On Rails Plugins,$rake应用程序:你好 要运行任务,我需要在它前面加上“app:”前缀,并且它在虚拟应用程序的上下文中运行。它还以rakehello的形式向主机应用程序公开(即在父Rails应用程序中用作插件时) 我想运行一个不需要Rails环境的rake任务,并运行一些命令,但它是从引擎根目录运行的,而不是从虚拟应用程序根目录运行的。我想对这个问题有一个更好的答案,但是我发现您可以在Rakefile中为引擎添加任务(因此。/Rakefile不在spec/dummy应用程序中),如下所示: 我更愿意将我的任务

$rake应用程序:你好

要运行任务,我需要在它前面加上“app:”前缀,并且它在虚拟应用程序的上下文中运行。它还以
rakehello
的形式向主机应用程序公开(即在父Rails应用程序中用作插件时)


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

我想对这个问题有一个更好的答案,但是我发现您可以在Rakefile中为引擎添加任务(因此。/Rakefile不在spec/dummy应用程序中),如下所示:

我更愿意将我的任务放在另一个文件中,但至少这提供了一种前进的方式。在我的例子中,我希望在虚拟应用程序中运行Konacha javascript测试,因此我的Rakefile如下所示:

task :my_task do
  puts "hi!"
end

task :default => [:spec, :my_task]

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

创建您的任务:

task :spec_javascript do
  exec 'cd spec/dummy && rake konacha:run' # exec passes command return value up stack!
end

task :default => [:spec, :spec_javascript]
然后转到引擎。/Rakefile并添加

# lib/tasks/your_engine_tasks.rake
desc "Explaining what the task does"
task :your_task do
  # Task goes here
end
现在我们开始:

load 'lib/tasks/your_engine_tasks.rake'
给你你的任务


希望我能帮上忙。

您需要将:环境添加到您的任务中:
任务您的任务::环境执行
load 'lib/tasks/your_engine_tasks.rake'
$ rake -T