Capistrano не включает установку в указанный набор гемов - PullRequest
2 голосов
/ 19 ноября 2011

У меня есть приложение Rails, настроенное для развертывания через Capistrano и RVM.Когда я запускаю cap my_stage deploy (это относится ко всем моим этапам), Capistrano bundle installs до /var/www/my_app/shared/bundle, хотя я указал в своем файле config/deploy.rb, что я хочу, чтобы он использовал набор камней 1.9.2@my_app.

Это противоречит моим ожиданиям - я ожидаю, что Capistrano развернется в домашнем каталоге моего пользователя: ~/.rvm/gems/ruby-1.9.2-p290@my_gemset/gems.

Я что-то не так делаю?Или это ожидаемое поведение.

Вот мой файл развертывания:

require 'capistrano/ext/multistage'
require 'bundler/capistrano'

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

set :application, "My Rails App"
set :repository,  "git@github.com:MyApp/my_app.git"

set :scm, :git
set :deploy_to, "/var/www/my_app"
set :use_sudo, false
ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "my_key.pem")]

# RVM
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'rvm/capistrano'                               
set :rvm_ruby_string, '1.9.2@my_app'
set :rvm_type, :user
set :user, 'my_user'

Вот мой .rvmrc файл в моем приложении Rails:

rvm_trust_rvmrc_flags=1
rvm use 1.9.2@my_app

Спасибо,Max

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Хотя я не использую Capistrano (я развертываю в Heroku, так что git - это все, что мне нужно), я думаю, что он, вероятно, использует текущую рекомендуемую рекомендацию вызова "bundle install --deployment" на производственном сервере который, согласно документации Bundler, устанавливает все гемы локально в корень развертывания вашего приложения вместо вашего GEM_HOME (который в данном случае будет вашим гемсетом RVM). Когда вы используете "bundle install --deployment", вы должны использовать "bundle exec rake" (или bin / rake, если вы также установили с --binstubs) для запуска Rake в вашей связанной среде.

Основная причина, по которой Bundler рекомендует развертывать этот способ, состоит в том, чтобы избежать любых ситуаций "ада зависимостей" в развернутом приложении. Хотя набор гемов RVM делает то же самое, Bundler не предполагает наличие или отсутствие RVM, он только предполагает, что Ruby и RubyGems установлены и работают.

При использовании Bundler всегда рекомендуется использовать «bundle exec» или binstubs независимо от флага --deployment (даже на вашем локальном компьютере в режиме разработки или тестирования), так что вы можете быть на 100% уверены, что Это зависит только от драгоценных камней, требуемых вашим Gemfile (и, конечно, от их зависимостей), и вы не можете случайно развернуть приложение, которое зависит от локально установленных драгоценных камней на вашем компьютере, которые не развернуты на рабочем сервере.

0 голосов
/ 13 ноября 2017

Добавление capistrano/rvm и установка моей версии ruby ​​внутри production.rb сделали трюк.

set :rvm_ruby_version, 'ruby-2.4.1'
...