Capistrano: Bundler не использует набор гемов rvm - PullRequest
4 голосов
/ 16 февраля 2012

У меня есть приложение Ruby on Rails 3.2, использующее для развертывания bundler и capistrano. Мой сервер - Debian Squeeze с rvm и ruby ​​1.9.2. Я прочитал материал rvm для capistrano (http://beginrescueend.com/integration/capistrano/), где вы можете установить gemset с помощью set :rvm_ruby_string, '1.9.2@my_gemset'.

Но во время развертывания, упаковщик записывает каждый драгоценный камень в /var/www/my_app/shared/bundle. Я подумал, что если я определю строку rvm_ruby_string со знаком @, то упаковщик будет использовать набор гемов.

Вывод из развертывания говорит

  * executing "cd /var/www/my_app/releases/20120216145728 && bundle install --gemfile /var/www/my_app/releases/20120216145728/Gemfile --path /var/www/my_app/shared/bundle --deployment --quiet --without development test"

Где я могу изменить --path /var/www/... для использования 1.9.2@my_gemset gemset из rvm?

Может быть, потому что я использую несколько сред для развертывания (подготовка, производство ...). Итак, вот мой deploy.rb

# RVM bootstrap
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'capistrano/ext/multistage'
require 'bundler/capistrano'
require 'rvm/capistrano'

set :rvm_bin_path, "/usr/local/rvm/bin"
set :rvm_type, :system

set :stages, %w(production staging)
set :default_stage, "staging"

set :application, "my_app"
set :repository,  "gitosis@mydomain.org:my_app.git"

set :scm, :git

set :user, "my_deploy_user"

set :use_sudo, false

set :ssh_options, { :forward_agent => true }

default_run_options[:pty] = true

namespace :deploy do
  task :start do
  end
  task :stop do
  end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

А в config / deploy / staging.rb

set :rails_env, "staging"
set :rvm_ruby_string, '1.9.2@my_gemset'
set :deploy_to, "/var/www/my_app"

role :web, "stage.mydomain.de"                          # Your HTTP server, Apache/etc
role :app, "stage.mydomain.de"                          # This may be the same as your `Web` server
role :db,  "stage.mydomain.de", :primary => true # This is where Rails migrations will run

Может быть, кто-то может мне помочь.

Ответы [ 2 ]

7 голосов
/ 07 марта 2014

capistrano-bundler 1.1.2 позволяет убрать флаг --path из аргументов компоновщика и установить гем в указанный набор гемов.

В конце концов мой конфиг выглядит так:

set :rvm_type, :system
set :rvm_ruby_version, "2.0.0-p353@#{fetch(:application)}"

set :bundle_path, nil
set :bundle_binstubs, nil
set :bundle_flags, '--system'
5 голосов
/ 17 февраля 2012

Вы оба используете интеграцию bundler и rvm. Rvm позаботится о том, чтобы он использовал правильный ruby ​​(удобно для управления рубинами), а bundler разделит все гемы в каталог shared / bundle. Это настройка по умолчанию для сборщиков. Я считаю, что это хороший способ настроить это, также потому что он работает с пассажиром из коробки, отделяет драгоценные камни от каждого приложения и имеет rvm, обрабатывающий рубины.

Если вы действительно хотите использовать RVM для разделения драгоценных камней, лучше всего начать с этого поста от Darcy (это относится к пассажиру). Как вы можете видеть, для этой работы требуются определенные усилия, но это возможно.

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