您好我想在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}”),但效果相同。
是否可能?
答案 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%可靠。