使用Capistrano 3的元编程自定义rake任务

时间:2014-04-07 11:58:25

标签: ruby-on-rails ruby metaprogramming capistrano3

我想在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

但我更喜欢第一种方法。

为什么第一种方法不起作用?

0 个答案:

没有答案