Развертывание Capistrano завершается неудачно, оболочка rvm сообщает, что rvm не найден
Недавно я унаследовал приложение Rails, которое много раз развертывалось в рабочей среде. Я ранее развернул в промежуточной среде. Теперь он не может быть развернут ни в одном из них. Однако другое приложение Rails, которое развертывается на тех же серверах с той же учетной записью, успешно развертывается с использованием rvm и capistrano.
Я получаю следующую ошибку:
* executing "if [ -d /path/to/app/shared/cached-copy ]; then svn switch -q --username svnusername --password <filtered> --no-auth-cache -r111111 https://svn.server.local/svn/projects/app/trunk /path/to/app/shared/cached-copy; else svn checkout -q --username svnusername --password <filtered> --no-auth-cache -r111111 https://svn.server.local/svn/projects/app/trunk /path/to/app/shared/cached-copy; fi"
servers: ["myserver-prod01.private.local"]
[myserver-prod01.private.local] executing command
** [myserver-prod01.private.local:: out]
** [myserver-prod01.private.local:: out] $rvm_path (/home/appuser/.rvm/) does not exist.
** [myserver-prod01.private.local:: out] /usr/local/rvm/scripts/rvm: line 174: rvm_is_a_shell_function: command not found
** [myserver-prod01.private.local:: out] /usr/local/rvm/scripts/rvm: line 185: __rvm_teardown: command not found
** [myserver-prod01.private.local:: out] /usr/local/rvm/bin/rvm-shell: line 83: rvm: command not found
** [myserver-prod01.private.local:: out] Error: RVM was unable to use 'ruby-1.9.3-current@appuser'
command finished in 554ms
*** [deploy:update_code] rolling back
* executing "rm -rf /path/to/app/releases/20130425150643; true"
servers: ["myserver-prod01.private.local"]
[myserver-prod01.private.local] executing command
** [out :: myserver-prod01.private.local]
** [out :: myserver-prod01.private.local] $rvm_path (/home/appuser/.rvm/) does not exist.
** [out :: myserver-prod01.private.local] /usr/local/rvm/scripts/rvm: line 174: rvm_is_a_shell_function: command not found
** [out :: myserver-prod01.private.local] /usr/local/rvm/scripts/rvm: line 185: __rvm_teardown: command not found
** [out :: myserver-prod01.private.local] /usr/local/rvm/bin/rvm-shell: line 83: rvm: command not found
** [out :: myserver-prod01.private.local] Error: RVM was unable to use 'ruby-1.9.3-current@appuser'
command finished in 209ms
** [deploy:update_code] exception while rolling back: Capistrano::CommandError, failed: "env PATH=/opt/toolkit/extra-dev-current/root/usr/bin:$PATH:/usr/database/bin LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 RAILS_ENV=production rvm_path=$HOME/.rvm/ /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-current@appuser' -c 'rm -rf /path/to/app/releases/20130425150643; true'" on myserver-prod01.private.local
failed: "env PATH=/opt/toolkit/extra-dev-current/root/usr/bin:$PATH:/usr/database/bin LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 RAILS_ENV=production rvm_path=$HOME/.rvm/ /usr/local/rvm/bin/rvm-shell 'ruby-1.9.3-current@appuser' -c 'if [ -d /path/to/app/shared/cached-copy ]; then svn switch -q --username svnusername --password <filtered> --no-auth-cache -r111111 https://svn.server.local/svn/projects/app/trunk /path/to/app/shared/cached-copy; else svn checkout -q --username svnusername --password <filtered> --no-auth-cache -r111111 https://svn.server.local/svn/projects/app/trunk /path/to/app/shared/cached-copy; fi'" on myserver-prod01.private.local
Я проверил сервер. RVM установлен и работает.
1 ответ
Это несоответствие версии rvm/rvm-capistrano. Проверьте версию rvm, установленную на сервере, и сравните ее с версией rvm-capistrano, установленной в комплекте. Если на вашем сервере установлен rvm 1.18.x, тогда заблокируйте версию rvm в вашем Gemfile на 1.2.x. rvm-capistrano 1.3.x требует rvm 1.19.x.
Я отвечаю на свой вопрос, потому что мне пришлось с этим разобраться. Это очевидно в ретроспективе, но не тогда, когда вы впервые видите ошибку. Это случай невозможности указать версии продукта в Gemfile. Как правило, наш обширный набор тестов улавливает такие проблемы, но наш набор тестов не охватывает развертывание, поэтому мы пропустили его, пока не стало слишком поздно.