Рельсы 3-Bundler / Capistrano Ошибки
у меня есть приложение basic Rails 3, работающее локально на моем поле разработки, но вы хотите проверить развертывание на ранней стадии, чтобы убедиться, что все работает. Я использую Капистрано для развертывания.
когда я запускаю cap deploy (после всех других необходимых настроек), он ломается на этой команде с этой ошибкой:
[...]
* executing 'bundle:install'
* executing "bundle install --gemfile /var/www/trex/releases/20100917172521/Gemfile --path /var/www/trex/shared/bundle --deployment --quiet --without development test"
servers: ["www.[my domain].com"]
[www.[my domain].com] executing command
** [out :: www.[my domain].com] sh: bundle: command not found
command finished
[...]
так что похоже, что он не может найти bundle команда на сервере.
однако, когда я войти на сервер...
$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
$ rails -v
Rails 3.0.0
$ bundle -v
Bundler version 1.0.0
...элемент bundle команда работает просто отлично.
что может быть не так?
-
(кроме того, для полноты картины:)
$ which ruby
~/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
$ which rails
~/.rvm/gems/ruby-1.9.2-p0/bin/rails
$ which bundle
~/.rvm/gems/ruby-1.9.2-p0/bin/bundle
8 ответов:
обновление:
для RVM > = 1.11.3, теперь вы должны просто использовать rvm-capistrano gem. Для более старых RVM >= 1.0.1, ответ ниже все еще применяется.
ОРИГИНАЛЬНЫЙ ОТВЕТ:
ладно, хотя я еще не получил полный
cap deployчтобы работать, я исправил этой проблема. Проблема заключалась в том, что Capistrano пытался использовать другой путь для Bundler (и других драгоценных камней), чем RVM пути.проверьте свой путь Капистрано делать
cap shell, потомecho $PATH. Вы, вероятно, увидите свой стандарт/usr/local/binи/usr/bin, но это не то, где RVM имеет Bundler и др., хранящийся.редактировать Капистрано
config/deploy.rbфайл, и добавьте следующие строки, за эти инструкции:# Add RVM's lib directory to the load path. $:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Load RVM's capistrano plugin. require "rvm/capistrano" set :rvm_ruby_string, '1.9.2' set :rvm_type, :user # Don't use system-wide RVMэто, наконец, заставило Капистрано увидеть Bundler и начать загружать драгоценные камни соответствующим образом.
Bundler не найден, потому что .файл не загружается и поэтому ваш путь-это неправильно. Это, вероятно, потому, что у вас есть сценарий RVM .файл.
простой ответ состоит в том, чтобы переместить скрипт RVM .файл для .bashrc и Capistrano должны быть в состоянии найти его (также проверьте это .файл источников .bashrc с).
Capistrano использует SSH для выполнения команд на сервере через не-интерактивной оболочки. Этот сеанс оболочки будет источник .bashrc следующее, но не .файл. Я добавил оператор ECHO к обоим и запустил LS через SSH. Вы можете увидеть в результатах ниже, что только .bashrc является исходным кодом:
$ ssh [email protected] ls .bashrc loaded git file1 file2
У меня была идентичная проблема с использованием rbenv. Решение состояло в том, чтобы взять конкретные линии rbenv из нижней части моего .bashrc файл и положить их в верхней части. Первая строчка моя .файл bashrc возвращал прерывание, если оболочка не работала в интерактивном режиме.
эта последняя строка должна быть
set :rvm_type, :userто есть пользователь должен быть символом, а не переменной, иначе вы получите
undefined local variable or method `user'
нет
rvm/capistranoработал для меня. Лучшим решением, которое я нашел, было добавление вdeploy.rbфайл в следующей строке (это для несистемных RVM):
set :bundle_cmd, 'source $HOME/.bash_profile && bundle'
насколько я понимаю, команда bundle не найдена, потому что переменная PATH, определенная в ~/пользователя.файл, не загружается Капистрано.
чтобы обойти это, я создал задачу :bundle_gems.
task :bundle_gems do run "cd #{deploy_to}/current && export PATH=/usr/local/pgsql/bin:/opt/ruby-enterprise-X.X.X/bin:$PATH && bundle install vendor/gems" endобратите внимание, что я также включаю путь к двоичным файлам PostgreSQL - установка PG gem не удалась, потому что их нельзя было найти, даже когда можно было найти пакет.
это похоже на грязный подход, хотя. Предположительно существует более "глобальное" место для определения путей к двоичным файлам, о котором я не знаю.
обновление 23/12
чтобы добавить каталог в $PATH для всех пользователей: https://serverfault.com/questions/102932/adding-a-directory-to-path-in-centos
однако это все равно не будет загружено, потому что это неинтерактивная оболочка без входа в систему.
одно предложение заключалось в том, чтобы добавить пути в /etc/bashrc следующее: Как установить $PATH таким образом, что "ssh user@host command" работает?
однако это не работает для меня. Я считаю, что это потому, что SSH не загружает /etc/bashrc.
еще одно предложение было редактировать ~/.ssh / environment:http://www.ruby-forum.com/topic/79248. однако это кажется почти таким же беспорядочным, как указание путей в deploy.рубидий.
я попробовал ряд предложений. Возникли проблемы с установкой путей в развертывании.rb-файл для среды RVM. Мое окончательное решение должно было включать следующее:
в config/развернуть.rb Файл Добавить:
require "bundler/capistrano"также в config / deploy.rb, или в моем случае config/production.rb как я использовал многоступенчатый вариант для Capistrano
after "deploy", "rvm:trust_rvmrc"этот шаг гарантирует, что мы перестанем получать хочешь доверять .rvmrc файл и он вызывает задачу в развертывании.rb файл, например:
namespace :rvm do task :trust_rvmrc do run "rvm rvmrc trust #{release_path}" end endпосле внесения этих незначительных изменений я смог запустить
cap production deployкоторый проверил код; выполнил развертывание конвейера активов, связал папку выпуска с текущим, выполнилbundle installи очищены.
Comments