2012-10-23 5 views
1

Привет, я хочу получить путь к драгоценному камню на удаленной машине с capistrano.Как получить удаленный путь Gem с Capistrano?

У меня есть следующий:

namespace :stanford do 

    desc "Copy language assets" 
    task :copy, :roles => :app do 
    puts Gem::Specification.find_by_name("ruby-opencv").gem_dir 
    end 
end 

Это возвращает путь к драгоценному камню на моей локальной машине ..

Я попытался сделать это с помощью запуска Capistrano (в перспективу «# {Gem :: Specification.find_by_name («ruby-opencv»). gem_dir} »), но с тем же эффектом.

Возможно ли это?

ответ

0

Попробуйте это:

namespace :stanford do 
    desc "Copy language assets" 
    task :copy, :roles => :app do 
    run %(ruby -e "puts Gem::Specification.find_by_name('ruby-opencv').gem_dir") 
    end 
end 

Существует также способ непосредственно с помощью команды самоцвет оболочки:

gem contents ruby-opencv |head -1 |sed 's,/*[^/]\+/*$,,' 

, но это не может быть надежным 100%.

+0

сначала возвращает команду "Не удается найти камень", второй - пустая строка .. Я на 100% уверен, что у меня есть этот камень, возможно, что-то связанное с инфраструктурой Capistrano - он устанавливает драгоценные камни в папку «shared», в то время как эти команды перечисляют драгоценности, которые я установил в системе (я думаю) ... – Stpn

1

Используйте команду capture, чтобы получить результат с удаленной машины. Если ваш проект использует Bundler, попробуйте это (проверено на Capistrano 3 только):

namespace :stanford do 

    desc "Copy language assets" 
    task :copy, :roles => :app do 
    puts capture(:bundle, 'show', 'ruby-opencv') 
    end 
end 

Если вы не используете Bundler, следующий может работать:

namespace :stanford do 

    desc "Copy language assets" 
    task :copy, :roles => :app do 
    puts capture(%(ruby -e "puts Gem::Specification.find_by_name('ruby-opencv').gem_dir")) 
    end 
end 
Смежные вопросы