Gri*_*mmo 60
我同意ddfreynee,但如果你知道你需要什么代码可以是这样的:
require 'rake'
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
Sample::Application.load_tasks # providing your application name is 'sample'
class RakeController < ApplicationController
def run
Rake::Task[params[:task]].reenable # in case you're going to invoke the same task second time.
Rake::Task[params[:task]].invoke
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在初始化程序中使用'rake'和.load_tasks.
Den*_*yne 57
我觉得在代码中调用rake任务并不好.我建议在rake任务之外的某处执行要执行的任务的代码,并让rake任务调用此代码.
这不仅具有易于调用外部rake(这是你想要的)的优点,而且还使测试rake任务变得更加容易.
小智 17
而不是尝试在控制器中调用rake任务,而是调用包含您尝试执行的任何逻辑的服务对象.
class SomeController < ApplicationController
def whatever
SomeServiceObject.call
end
end
Run Code Online (Sandbox Code Playgroud)
...然后,假设您正在讨论自定义rake任务,请让它也调用服务对象:
namespace :example do
desc 'important task'
task :important_task do
SomeServiceObject.call
end
end
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉服务对象,它们只是执行特定工作的普通旧ruby类.如果你试图调用一些默认的rake任务(即:db:migrate),我强烈建议不要从控制器那样做.
小智 16
您可以在控制器中执行此操作:
%x[rake name_task]
Run Code Online (Sandbox Code Playgroud)
with:name_task是您的任务名称
| 归档时间: |
|
| 查看次数: |
40008 次 |
| 最近记录: |