main:Object的未定义方法'execute'

时间:2014-08-30 17:53:57

标签: ruby-on-rails capistrano

我正在尝试在我正在处理的rails应用程序上为Capistrano 3编写以下代码。我收到的错误是粘贴在帖子标题上的消息。

196  namespace :swconfig do
197   desc "Install Bazaar xmllog plugin."
198   task :install_bzr_xmllog do
199     puts "Installing Bazaar xmllog..."
200     execute "rm -rf /home/deployer/.bazaar/plugins/xmloutput"
201     execute "mkdir -p /home/deployer/.bazaar/plugins && cd /home/deployer/.bazaar    /plugins && bzr branch lp:~amujumdar/bzr-xmloutput/emit_authors xmloutput"
202   end
203
204   desc "Upgrade rack"
205   task :upgrade_rack do
206     puts "Upgrading rack to 1.5.2"
207     execute "gem install rack -v1.5.2"
208   end
209
210 end

我已经阅读了大量有关将卡皮斯特拉诺从2,Capistrano升级到其官方网站以及堆栈溢出的研究,但我不确定问题是什么。

因为语法来自Capistrano 2,'execute'关键字之前被标记为'run',当然这给了我错误Undefined方法'run'for main:Object。但是,将run替换为execute并不能解决错误。我也尝试过执行语法的这种变体。

196  namespace :swconfig do
197   desc "Install Bazaar xmllog plugin."
198   task :install_bzr_xmllog do
199     puts "Installing Bazaar xmllog..."
200     execute :rm, " -rf /home/deployer/.bazaar/plugins/xmloutput"

这仍然会产生相同的错误。根据Capistrano的官方网站Capistrano,正确的语法应该是上面的变化。但是,在我发现的这篇文章Writing Capistrano Tasks中,执行语法不是以符号格式编写的。

最后,因为找到标准,一致且可靠的Capistrano语法是如此的折磨,我已经没有选择/导致试图解决这个问题。有没有人有任何想法可能是什么问题?谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

似乎capistrano可能设置了更有用的错误消息。这对我有用:

for cap2:

namespace :deploy do
  desc "Generate static error pages"
  task :generate_static_error_pages do
    run "cd #{current_path}; RAILS_ENV=production rake app:generate_static_error_pages"
  end
end

for cap3:

namespace :deploy do
  desc "Generate static error pages"
  task :generate_static_error_pages do
    on roles(:web) do
      execute "cd #{current_path}; RAILS_ENV=production rake app:generate_static_error_pages"
    end
  end
end

这两个变化:

  • run变为执行
  • 筑巢'执行'在角色(:网络)'中划线块。