Проблема с Capistrano и Bundler-пакет: не найден
Я продолжаю получать следующую ошибку при попытке развернуть мое приложение с опцией bundle/install:
failed: "sh -c 'cd /home/deploy/swamp/releases/20110903003336
&& bundle install --gemfile /home/deploy/swamp/releases/20110903003336/Gemfile
--path /home/deploy/swamp/shared/bundle --deployment --quiet
--without development test'" on 12.345.678.98
**обновление-похоже, я пропустил ошибку:
[err :: 12.345.678.98] sh: bundle: not found
Я пробовал это в своем развертывании.rb:
require "bundler/capistrano"
и я попытался это:
namespace :bundler do
task :create_symlink, :roles => :app do
shared_dir = File.join(shared_path, 'bundle')
release_dir = File.join(current_release, '.bundle')
run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}")
end
task :bundle_new_release, :roles => :app do
bundler.create_symlink
run "cd #{release_path} && bundle install --without test"
end
end
after 'deploy:update_code', 'bundler:bundle_new_release'
Я также переместил свой пакет на путь поставщика с этим:
bundle install --path vendor/bundle
Я не думаю, что это проблема с разрешениями, потому что я могу войти вручную с помощью deploy и bundle install непосредственно на сервере нет проблем. Вот все развертывание.файл rb:
require "bundler/capistrano"
set :application, "swamp"
set :domain, "12.345.678.98"
set :repository, "git@github.com:***/**.git"
set :deploy_to, "/home/deploy/#{application}"
set :rails_env, 'production'
set :branch, "master"
role :app, domain
role :web, domain
role :db, domain, :primary => true
set :deploy_via, :remote_cache
set :scm, :git
set :user, "deploy"
set :runner, "deploy"
ssh_options[:port] = ****
set :use_sudo, false
after "deploy", "deploy:cleanup"
namespace :deploy do
desc "Restarting mod_rails with restart.txt"
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{current_path}/tmp/restart.txt"
end
[:start, :stop].each do |t|
desc "#{t} task is a no-op with mod_rails"
task t, :roles => :domain do ; end
end
end
task :after_update_code do
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
end
6 ответов
Я нашел решение здесь:
http://www.pastbedti.me/2011/06/change-path-environment-with-rails-and-capistrano/
в вас config / deploy.rb добавьте следующий фрагмент
set :default_environment, {
'PATH' => "/opt/ruby-enterprise/bin/:$PATH"
}
затем мне пришлось добавить gemfile.блокировка и gemfile в хранилище и БАМ!
устаревший
приведенное ниже Решение работает для capistrano 2. для версии 3 и выше используйте плагин capistrano-rbenv.
предполагая, что вы используете оболочку bash и настроили rbenv в чем-то вроде bashrc
или (в мире /etc
или на пользовательской основе) проблема в том, что capistrano не использует так называемую оболочку входа, которая требуется для загрузки этих файлов (которая, в end, load rbenv).
для этой цели вы, возможно, захотите проинструктируйте Капистрано использовать такую оболочку:
default_run_options[:shell] = '/bin/bash --login'
положите это в свой deploy.rb
. также имеет преимущество держать вас сухим, не вводя другое место для управления rbenv $PATH
дополнения -- в отличие от решения fatfrog.
это происходит потому, что инициализация bashrc rbenv не выполняется. Переместите это в верхнюю часть файла bashrc пользователя deployer, и это исправит проблему:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
Если ваша проблема RVM на сервере, то посмотрите на помощь, предоставляемую rvm.io: https://rvm.io/integration/capistrano/#gem
убедитесь, что у вас действительно установлен rbenv на вашем сервере(звучит смешно, но это произошло в моем случае)
используйте этот камень:https://github.com/yyuu/capistrano-rbenv
для получения более подробной информации, см. Мой ответ здесь: https://stackoverflow.com/a/15779928/445908
я столкнулся с этой проблемой, и в моем случае фрагмент из deploy / production.rb был следующим:
run "cd #{release_path} && bundle --without development test"
пришлось установить bundler следующим образом:
sudo apt-get install bundler