Психологическая ошибка при развертывании Capistrano

У меня есть сценарий развертывания 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'.

Я нашел аналогичную проблему здесь и предположить, что это предупреждение действительно является причиной сбоя Psych. Но я не могу избавиться от него, PATH на самом деле выглядит хорошо для меня, и rvm стоит на первом месте, когда я подключаюсь по ssh и проверяю его:

$ 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: я добавил хук с «использовать rvm» в сценарий Capistrano, и он возвращает мне «RVM не является функцией». Кажется, он не загружает bashrc/другие сценарии инициализации.

UPD2: Да, он не загружает bash, но когда я включаю bash, становится еще хуже. В качестве временного решения я отключил capistrano/assets. Кажется, все, что мне нужно, это стереть скопированный сценарий капистрано и переписать его с нуля.


person lifecoder    schedule 22.07.2013    source источник


Ответы (1)


Когда Capistrano входит в систему - он использует неинтерактивную оболочку - он не загружает .bash_profile Итак, я загрузил bash как оболочку по умолчанию в deployment.rb:

default_run_options[:shell] = '/bin/bash'

а затем переместите скрипт загрузки RVM из .bash_profile в .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*
person lifecoder    schedule 23.07.2013