Как я могу использовать замороженный Capistrano?
-
22-07-2019 - |
Вопрос
Предыстория
Я на Rails 2.1 и мне нужно заморозить гем Capistrano в папке моего поставщика (так как мой хост нарушил их зависимости от cap gem, и я хочу сделать себя максимально независимым).
На моем локальном компьютере с Windows я поместил следующий мой environment.rb
config.gem "capistrano", :version => "2.5.2"
config.gem "net-ssh", :lib => "net/ssh", :version => "2.0.4"
config.gem "net-scp", :lib => "net/scp", :version => "1.0.1"
config.gem "net-sftp", :lib => "net/sftp", :version => "2.0.1"
config.gem "net-ssh-gateway", :lib => "net/ssh/gateway", :version => "1.0.0"
Драгоценные камни уже были установлены, и я заморозил их. Проверка ...
>rake gems
...
[F] capistrano = 2.5.2
[F] net-ssh = 2.0.4
[F] net-scp = 1.0.1
[F] net-sftp = 2.0.1
[F]net-ssh-gateway = 1.0.0
Затем я фиксирую SVN локально и обновляюсь на prod Linux box.
Проблема
Когда я пытаюсь запустить замороженную версию Capistrano, я получаю следующую ошибку.
$ ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
./vendor/gems/capistrano-2.5.2/bin/cap:3:in `require': no such file to load --capistrano/cli (LoadError)
from ./vendor/gems/capistrano-2.5.2/bin/cap:3
Есть идеи, что я сделал не так?
Update
Решение
Вы не сделали ничего плохого. Вы видите эту проблему, потому что файл cap
в capistrano / bin / cap
не предназначен для автономной работы. Вы увидите тот же результат, если попытаетесь запустить его из основной папки с гемами. Исполняемый файл cap
(хранится в / usr / bin / cap
при стандартной установке Linux) требует rubygems
, регистрирует capistrano и затем загружает файл capistrano / bin / cap
. Р>
Одним из решений этой проблемы было бы добавить require 'rubygems'
в ваш файл capistrano / bin / cap:
#!/usr/bin/env ruby
require 'rubygems'
require 'capistrano/cli'
Capistrano::CLI.execute
Если вы не хотите изменять capistrano / bin / cap
, вы можете специально включить библиотеку rubygems при запуске с использованием флага -r. Ваша команда будет выглядеть так:
$ ruby -r rubygems ./vendor/gems/capistrano-2.5.2/bin/cap deploy-with-migrations
Другие советы
Другой способ использовать определенную версию Capistrano - добавить псевдоним в ваш .bash_login, например, следующим образом:
alias cap1='cap _1.4.2_ '
где cap1 - команда, которую вы будете запускать, а 1.4.2 - версия, для которой вы хотите выполнить эту команду, тогда вы можете:
cap1 deploy
Затем будет использовать эту версию capistrano для развертывания вашего приложения.