rake任务没有调用。来自rails中的控制器动作。

时间:2015-09-16 14:11:59

标签: ruby-on-rails ruby ruby-on-rails-4 action rake-task

我在名为att_rec_for_emp.rake的文件中创建了一个rake任务。在这个文件中,我有以下任务。

  task hello(parameter): :environment do

  p "{parameter}"

  end

如何通过传递参数在控制器动作中调用此rake任务?

我有这样的行动

   def call_task
     emp = Employee.first
     Rake::Task[ 'att_rec_for_emp:hello("hello world")' ].invoke
     redirect_to :root , :notice => "message fine" 
   end

并且在config/initialisers/rake.rb我有以下声明。

  Rake.load_rakefile Rails.root.join(  'lib','tasks','att_rec_for_emp.rake' )

但仍然没有执行任务。得到错误

   Don't know how to build task 'att_rec_for_emp:hello'

2 个答案:

答案 0 :(得分:1)

我想我已经开始工作了。从这里调整。

这就是我的所作所为:

<强> LIB /任务/ att_rec_for_emp.rake

task :hello, [:parameter] => :environment do |t, args|
  p "#{args[:parameter]}"
end

应用/控制器/ your_controller.rb

Rake::Task.clear
YourAppName::Application.load_tasks

class YourController < ApplicationController
  def call_task
    Rake::Task[:hello].reenable
    Rake::Task[:hello].invoke('hi world')
  end
end

您还可以将前两行(在YourController类定义之上)放在初始化程序中。

注意:您在初始化程序中加载Rake文件的方法也应该有效但我的设置稍有不同。我在application.rb中加载了我的整个lib目录。

<强>配置/ application.rb中

config.autoload_paths += Dir["#{config.root}/lib"]

希望有所帮助!

答案 1 :(得分:0)

尝试将此行添加到您的控制器:

YourAppName::Application.load_tasks

或者,将目录名称从initialisers更改为initializers