Capistrano 3,使用上传!在lib / capistrano / tasks中的任务中

时间:2014-07-05 12:02:21

标签: ruby-on-rails ruby capistrano3

我正在使用Capistrano 3,我想创建自己的任务。所以我在lib / capistrano / tasks中创建了一个文件my_new_thing.rake,当我运行cap -T时我可以看到任务。但是......有些方法不可用。当我尝试使用上传!我得到了

cap aborted!
NoMethodError: undefined method `upload!' for main:Object

但如果我将相同的任务移到config / deploy.rb中,那么就上传吧!方法可用。

那是怎么回事?如何创建新的Capistrano任务将它们放在单独的文件中并使它们有效?

3 个答案:

答案 0 :(得分:13)

我有同样的问题,我在一个单独的文件中创建了我自己的食谱,我在部署中加载但无法上传!工作。

为我修复的是在任务中添加角色过滤器,使我的最终配方看起来像这样:

 namespace :figaro do      
   desc "Transfer Figaro's application.yml to shared/config"
   task :upload do
     on roles(:all) do
       upload! "config/application.yml", "#{shared_path}/config/application.yml"
     end
   end
 end
 before "deploy:check", "figaro:upload"

我希望有所帮助!

答案 1 :(得分:0)

如果您想将它们保存在单独的文件中,可以为capistrano配方创建一个文件夹config/recipes

使用.rb扩展名,因为这不是常规的佣金任务。

config/deploy.rb添加此行

load File.expand_path('../recipes/my_new_thing.rb', __FILE__)

答案 2 :(得分:0)

如果您想使用rake任务,那么您需要在部署文件中创建一个任务,该任务调用那些不是那么聪明的rake任务。因此@Sharagoz建议最好的方法是创建自己的配方文件并将其包含在。