Вопрос

Предыстория

Я на 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 для развертывания вашего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top