Проблема Капистрано и Бандлера - пакет: не найден - PullRequest
8 голосов
/ 03 сентября 2011

Я получаю следующую ошибку при попытке развернуть мое приложение с опцией 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

Я пробовал это в своем deploy.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 и пакетной установки непосредственно на сервер без проблем. Вот весь файл deploy.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 ]

12 голосов
/ 04 сентября 2011

Я нашел решение здесь:

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.lock и gemfile в репозиторий и BAM!

7 голосов
/ 02 августа 2013

устареть

нижеприведенное решение работает для capistrano 2. для версии 3 и выше используйте плагин capistrano-rbenv .


при условии, что вы используете оболочку bash и настроили rbenv во что-то вроде файла bashrc или profile (глобально в /etc или для каждого пользователя), проблема в том, что Capistrano не использует так называемую оболочку входа в систему, которая необходима для загрузки этих файлов (которая, в конце концов, загружает rbenv).

для этой цели вы можете проинструктировать Capistrano использовать такую ​​оболочку :

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

положите это в ваш deploy.rb. Кроме того, вы сохраняете СУХОЙ, не вводя другое место для управления вашими дополнениями rbenv $PATH - в отличие от решения fatfrog.

5 голосов
/ 04 ноября 2013

Это происходит потому, что инициализация bashrc rbenv не выполняется. Переместите это в начало файла bashrc пользователя развертывания, и это решит проблему:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
1 голос
/ 03 апреля 2013
  1. убедитесь, что на вашем сервере действительно установлен rbenv (звучит нелепо, но в моем случае это произошло)

  2. используйте этот драгоценный камень: https://github.com/yyuu/capistrano-rbenv

для получения более подробной информации, смотрите мой ответ здесь: https://stackoverflow.com/a/15779928/445908

1 голос
/ 25 марта 2013

Если ваша проблема связана с RVM на сервере, обратитесь за помощью к rvm.io: https://rvm.io/integration/capistrano/#gem

0 голосов
/ 22 сентября 2014

Я столкнулся с этой проблемой, и в моем случае фрагмент из deploy / production.rb был следующим:

run "cd #{release_path} && bundle --without development test"

Пришлось установить упаковщик следующим образом:

sudo apt-get установочный пакет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...