задача в Capistrano 3 не может найти RVM

Я использую Capistrano 3 для развертывания PHP-приложения в течение нескольких месяцев, и оно отлично работает. Недавно мы решили начать использовать Sass для таблиц стилей, и сейчас я пытаюсь внедрить эти изменения.

Я пытаюсь написать задачу, которая запускается после завершения остальной части развертывания, которая преобразует файл scss в css с использованием драгоценного камня Sass.

namespace :deploy do

  after :finished, :assets do
    on roles(:app), in: :sequence, wait: 5 do
      within release_path do
        # process sass files to css
        execute "sass #{release_path}/styles/test.scss #{release_path}/styles/test.css"
      end
    end
  end

end

Я использую RVM на сервере, и драгоценный камень sass установлен в определенном наборе драгоценных камней. В корне проекта также есть файл .rvmrc, который загружает правильный набор драгоценных камней, когда вы переходите в «текущий» каталог, созданный capistrano.

Когда я развертываю, он терпит неудачу в моей новой задаче, говоря, что не может найти sass.

stderr: bash: sass: command not found

Я могу войти на сервер как тот же пользователь, который используется для развертывания с помощью Capistrano, и перейти в «текущий» каталог и запустить ту же команду в задаче (заменив #{release_path} фактическим путем), и все работает нормально.

Что я пробовал:

  1. переписав команду выполнения следующим образом:

rvm use 2.1.5@deployer && sass #{путь_релиза}/styles/test.scss #{путь_релиза}/styles/test.css

  1. написание скрипта bash, доступного пользователю развертывателя, который загружает набор драгоценных камней, а затем запускает команду sass (работает, когда я запускаю новый скрипт при входе в сервер в любом каталоге, не работает при вызове из задачи capistrano)

  2. используя плагин capistrano-rvm (добавляя в Gemfile, требуя в Capfile) для установки набора драгоценных камней RVM - надеясь, что он загрузит набор драгоценных камней перед выполнением каких-либо команд.

Я много раз использовал Capistrano для развертывания приложений Rails и всегда использую подключаемый модуль активов, который выполняет предварительную компиляцию и еще много чего... Это первый проект, который я использовал для развертывания приложения PHP, и, возможно, первый раз, когда я пытался запустить приложение вручную. задача capistrano, которая использует rubygem, установленный на сервере с RVM.

Можно ли запустить задачу, которая зависит от определенного драгоценного камня/набора драгоценных камней... без использования плагинов рельсов по умолчанию?

Любая помощь приветствуется.

Спасибо, Джей Ди


person johndavid400    schedule 04.06.2015    source источник


Ответы (1)


понял это, потребовав команду capistrano/bundler, просто чтобы посмотреть, как capistrano запускает пакет по умолчанию... скопировал команду bundler, которая была зарегистрирована во время развертывания, затем изменил ее, чтобы она работала для того, что я пытался сделать, и, наконец, удалил плагин для сборки, так как мне на самом деле не нужно развертывание для сборки чего-либо.

без использования каких-либо плагинов capistrano вы можете предварить команду выполнения задачи capistrano указанием местоположения набора драгоценных камней следующим образом:

after :finished, :assets do
  on roles(:app), in: :sequence, wait: 5 do
    within release_path do
      execute "~/.rvm/bin/rvm ruby-2.1.5@deployer do sass #{release_path}/styles/sass/screen.scss #{release_path}/styles/screen.css"
    end
  end
end

Ключевое отличие заключается в том, что следующий фрагмент предваряет фактическую команду, которую я пробовал изначально:

~/.rvm/bin/rvm ruby-2.1.5@deployer do ....

Очевидно, вы можете использовать любую команду, требующую указанного набора драгоценных камней (вместо команды sass, которую я использую).

person johndavid400    schedule 04.06.2015