1

嗨,我想用 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("ruby-opencv").gem_dir}")但效果相同。

有可能吗?

4

2 回答 2

1

使用capture命令从远程机器获取结果。如果你的项目使用捆绑器,试试这个(仅在 Capistrano 3 上测试过):

namespace :stanford do

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

如果不使用捆绑器,以下可能会起作用:

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
于 2015-01-14T14:03:32.760 回答
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% 可靠的。

于 2012-10-24T00:17:33.390 回答