我有一个Capistrano部署脚本已经工作了一段时间,但现在它在部署时抛出了这样的错误:
/Users/lifecoder/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError)
from /Users/lifecoder/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from /Users/lifecoder/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/psych.rb:151:in `parse'
from /Users/lifecoder/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/psych.rb:127:in `load'
...
在部署期间它还会抛出几个警告:
** [out :: test.domain] Warning! PATH is not properly set up, '/home/lifecoder/.rvm/gems/ruby-1.9.3-p448/bin' is not at first place,
** [out :: test.domain]
** [out :: test.domain] usually this is caused by shell initialization files - check them for 'PATH=...' entries,
** [out :: test.domain]
** [out :: test.domain] to fix run: 'rvm use ruby-1.9.3-p448'.
我发现类似的问题here,并假设这个警告实际上是心理崩溃的原因。但我无法摆脱它,PATH实际上对我来说很好,当我通过ssh连接并检查它时,rvm 首先 :
$ echo $PATH
/home/lifecoder/.rvm/gems/ruby-1.9.3-p448/bin:/home/lifecoder/.rvm/gems/ruby-1.9.3-p448@global/bin:/home/lifecoder/.rvm/rubies/ruby-1.9.3-p448/bin:/home/lifecoder/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
我对* nix并不那么精通所以我可能会错过一些东西 - 但是找不到确切的东西。
我知道YAML解析器引擎更改可能无法修复,或者在某处删除YAML文件,因此Psych无法启动,但我更愿意以正确的方式修复此问题。
UPD1 :我在Capistrano脚本中添加了一个带有'use rvm'的钩子,它返回给我'RVM不是一个函数'。似乎它没有加载bashrc /其他init脚本。
UPD2 :是的,它不会加载bash,但是当我启用bash时,它会变得更糟。作为临时解决方案,我禁用了capistrano / assets。似乎我只需要擦除复制粘贴的capistrano脚本并从头开始重写它。
答案 0 :(得分:1)
当Capistrano登录时 - 它使用非交互式shell - 它不会加载.bash_profile 所以,我在 deployment.rb 中加载了一个bash作为默认shell:
default_run_options[:shell] = '/bin/bash'
然后将.bash_profile的RVM加载脚本移动到.bashrc
#.bash_profile
source ~/.bashrc
#.bashrc
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*