我想在Capistrano的远程服务器上运行自定义rake任务。
我有以下代码:
# cap production rake:db:seed
namespace :rake do
namespace :db do
%w|migrate reset rollback seed|.each do |command|
desc "Rake db:#{command}"
task command, roles: :app, except: {no_release: true} do
run "cd #{fetch(:deploy_to)}/current"
run "bundle exec rake db:#{ENV['task']} RAILS_ENV=#{fetch(:rails_env)}"
end
end
end
end
但元编程不起作用。我收到以下错误:
NoMethodError: undefined method
尾巴为nil:NilClass`
当然,我可以完成以下任务:
# cap production rake:invoke task=db:seed
desc "Invoke rake task"
task :invoke do
run "cd #{fetch(:deploy_to)}/current"
run "bundle exec rake #{ENV['task']} RAILS_ENV=#{fetch(:rails_env)}"
end
但我更喜欢第一种方法。
为什么第一种方法不起作用?