我在一个 controller 的 #create
方法里面调用一个 rake task,是想在每建立一行记录的同时运行一个 task。假设这个 task 叫 agent:test
使用代码如下:
# 文件: lib/tasks/agent.rake
namespace :agent do
desc 'test'
task :test => :environment do
puts "aaaaaaa"
puts "aaaaaaa"
puts "aaaaaaa"
end
end
# 文件: app/controller/agents_controller.rb
require 'rake'
class AgentsController < ApplicationController
# 略去一些 actions
def create
@agent = current_user.agents.build(agent_params)
if @agent.save
Rake::Task['agent:test'].invoke # 此处调用 rake task
flash[:success] = "Agent sent!"
redirect_to current_user
else
flash.now[:error] = "Oops, something is wrong."
render 'new'
end
end
end
使用 rails server
或者 bundle exec rails server
启动服务器,然后通过网页创建一个 agent 的时候,agent:test
并没有被执行,服务器 log 输出:
RuntimeError: Don't know how to build task 'agent:test'
然后我尝试在 rails console 中运行:
Rake::Task['agent:test'].invoke
输出同样的错误信息。
我打开 Rails 缺省的 Rakefile
看了看,里面是这样的
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Agent::Application.load_tasks
看这顶上两行注释,lib/tasks
下面的 .rake
文件应该是能直接用才对,不知道为什么......
请问我是不是做错了什么?...