Смущен инструкциями RVM для Capistrano - PullRequest
1 голос
/ 06 августа 2011

Работает над тем, чтобы RVM работал с Capistrano и Rails 3.1rc5 и запутался в найденных мною инструкциях.

Веб-сайт RVM предоставляет эти инструкции , в которых говорится:

В новой опции вы можете сделать следующее (настроить в соответствии с вашими личными настройками):

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path. 
require "rvm/capistrano"               # Load RVM's capistrano plugin. 
set :rvm_ruby_string, 'ree@rails3'     # Or whatever env you want it to run in.

Теперь я предполагаю, что они хотят это наверху нашего deploy.rb файла!?! Я спрашиваю только потому, что я не видел "$:." среди, хотя и немногих, deploy.rb, которые я видел.

Что конкретно делает строка, начинающаяся с "$:."? И относится ли он к deploy.rb или куда-то еще?

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

$: - это специальная переменная Ruby, эквивалентная $LOAD_PATH, то есть пути, который Ruby ищет, когда вы используете оператор require. Вызов .unshift(...) на нем добавляет указанный путь к front пути загрузки.

Если вы просто вызвали require 'rvm/capistrano' без оператора $:.unshift, вы получите ошибку, потому что по умолчанию библиотека RVM Capistrano не находится в пути загрузки Ruby. Причина, по которой вы не видели этого в других deploy.rb файлах, заключается в том, что обычно единственными необходимыми библиотеками являются библиотеки Capistrano, которые уже включены при запуске cap deploy (или любой другой команды cap).

Мои deploy.rb файлы имеют точно такой же код, и он прекрасно работает.

1 голос
/ 06 августа 2011

Я считаю, что это должно быть на верхнем уровне, чтобы его можно было установить перед любыми вызовами - то есть перед группировкой, любыми задачами с граблями и т. Д. Это было проблематично для меня.В моем случае мои веб-серверы и серверы приложений не совпадают, и я не хочу rvm на веб-сервере.

Также кажется немного черной магии, когда реальное решение довольно легко.После обновления вашего кода настройте благословенный набор гемов в файле .rvmrc, и больше ничего не нужно делать.

after "deploy:update_code", "deploy:rvm:setup"

namespace :deploy do
  namespace :rvm do
    # Set up .rvmrc
    # Note, not using method described in:
    #   https://rvm.beginrescueend.com/integration/capistrano/
    # We want to use RVM only on the app server, so better to set up and bless an .rvmrc file
    task :setup, :roles => :app do
      run "cd #{latest_release}; rvm use 1.9.2@#{application} --rvmrc --create && rvm rvmrc trust"
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...