1

こんにちは、カピストラーノを使用してリモート マシンで 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 シェル コマンドを直接使用する方法もあります。

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

しかし、これは 100% 信頼できるとは限りません。

于 2012-10-24T00:17:33.390 に答える