如何使用Capistrano获得远程Gem路径?

时间:2012-10-23 22:00:46

标签: ruby-on-rails gem capistrano remote-debugging

您好我想在capistrano的远程机器上获得gem的路径。

我有以下内容:

namespace :stanford do

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

这将返回本地计算机上gem的路径..

我尝试通过capistrano的运行(运行“#{Gem :: Specification.find_by_name(”r​​uby-opencv“)。gem_dir}”),但效果相同。

是否可能?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 shell命令的方法:

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

但这可能不是100%可靠。