Рельсы 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
817   8  

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.рубидий.

Это один работал для меня:

set: bundle_cmd, 'source $HOME/.bash_profile & & bundle'

я попробовал ряд предложений. Возникли проблемы с установкой путей в развертывании.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

    Ничего не найдено.