Ruby on rails 未定义的方法';执行';对于main:Object

Ruby on rails 未定义的方法';执行';对于main:Object,ruby-on-rails,capistrano,Ruby On Rails,Capistrano,我正试图在我正在开发的rails应用程序上为Capistrano3编写以下代码。我收到的错误是粘贴在文章标题上的消息 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/.baz

我正试图在我正在开发的rails应用程序上为Capistrano3编写以下代码。我收到的错误是粘贴在文章标题上的消息

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以及堆栈溢出的研究,但我不确定问题出在哪里

由于语法来自Capistrano 2,“execute”关键字先前标记为“run”,这当然给了我main:Object的未定义方法“run”的错误。但是,将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的官方网站,正确的语法应该是上面的变体。然而,在我发现的这篇文章中,execute语法不是以符号格式编写的


最后,因为找到标准、一致和可靠的Capistrano语法是一项艰巨的任务,我已经没有了解决这个问题的选项/线索。有人知道问题出在哪里吗?感谢您的帮助。

似乎capistrano可以设置一条更有用的错误消息。以下是对我有效的方法:

第二章:

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
第三章:

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
两个变化:

  • 运行变为执行
  • 在“on roles(:web)”块中嵌套“execute”行

Derp。我发现了我的错误。旧语法没有在任务中指定roles关键字。