Ruby on rails 3 从capistrano、cap deploy bash运行远程rake任务:-c:第1行:语法错误:意外的文件结尾
在这个主题中,我遵循了@Coward的答案: 要添加自定义任务Ruby on rails 3 从capistrano、cap deploy bash运行远程rake任务:-c:第1行:语法错误:意外的文件结尾,ruby-on-rails-3,rake,capistrano,Ruby On Rails 3,Rake,Capistrano,在这个主题中,我遵循了@Coward的答案: 要添加自定义任务rake:invoke在mydeploy.rb中,以便能够远程调用rake任务 它本身的工作非常完美,但当我的capdeploy处理正在执行资产时,我会遇到以下错误:预编译 [mydomain.com] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '1.9.2@ziya' -c 'cd /var/deploy/ziya/releases/20120223100338 &am
rake:invoke
在mydeploy.rb
中,以便能够远程调用rake任务
它本身的工作非常完美,但当我的capdeploy
处理正在执行资产时,我会遇到以下错误:预编译
[mydomain.com] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '1.9.2@ziya' -c 'cd /var/deploy/ziya/releases/20120223100338 && #<Capistrano::Configuration::Namespaces::Namespace:0x007ff2b4a4bad8> RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile'
** [out :: my domain.com] bash: -c: line 1: syntax error: unexpected end of file
command finished in 1265ms
但是,如果我将任务:invoke
移动到名称空间:deploy
,删除名称空间:rake
,那么一切都正常了,这太令人困惑了。这是因为Capistrano在其源代码中,以这种方式使用部署文件中的set:rake
指令将哪个命令用作rake命令行
但是,由于capistrano内部的原因,当您声明rake
命名空间时,它将优先于声明的rake变量。因此,当capistrano执行其预编译资产的配方时,它将使用rake
变量而不是返回“rake”
字符串返回已声明的名称空间,并将其转换为字符串。您可以在生成的命令行的这一部分中看到它:
... && #<Capistrano::Configuration::Namespaces::Namespace:0x007ff2b4a4bad8> RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile'
…&RAILS\u ENV=暂存RAILS\u组=资产资产:预编译'
这显然会导致shell语法错误,这就是更改名称空间解决问题的原因。Awesome!救了我的命!谢谢
... && #<Capistrano::Configuration::Namespaces::Namespace:0x007ff2b4a4bad8> RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile'