1

私は Ruby で IDE を書いていますが、コマンド ラインでプログラムを実行し、Rubygem としてインストールしたときに、すべてのファイルを「必須」にする方法に困惑しています。

私のRubygemには、「vr」という名前の実行可能ファイルが含まれています。この「vr」実行可能ファイルに、プロジェクトの他のすべてのファイルを「必須」にする必要があります。

私が開発しているとき、すべてのプロジェクトのファイルを要求するのは簡単です。次のように、それらへの相対パスを単に「要求」します。

require_all Dir.glob(File.expand_path(File.dirname(__FILE__)) + "/../bin/**/*.rb")

require_all gem は完璧に機能します。しかし、このプログラムを ruby​​gem としてインストールすると、大きな問題が発生します。「vr」実行可能ファイルが ruby​​gems によってインストールされると、「vr」実行可能ファイルが特別なディレクトリにコピーされます。

/home/eric/.rvm/gems/ruby-1.9.3-p125/bin

このディレクトリは、プロジェクトのルート フォルダーから完全に分離されています。そのため、私のプロジェクトのすべてのファイルは、「require」ステートメントによって検出されなくなりました。

Rubygems は、このディレクトリを gem のルートとして作成します。

/home/eric/.rvm/gems/ruby-1.9.3-p125/visualruby-0.0.55

そのディレクトリのすべてのファイルを自分のプロジェクトに「要求」できる必要があります。

これまでの私の解決策は、プロジェクトの lib フォルダーにある「visualruby.rb」という 2 番目のファイルを作成することです。すべてのプロジェクト ファイルを要求するために、require_all ステートメントが含まれています。次に、このコードを「vr」実行可能ファイルに追加して、実行可能ファイルをリンクするだけです。

base_file = File.dirname(__FILE__) + '/lib/visualruby.rb'
if File.file?(base_file) 
  require base_file  #load from project
else
  require 'visualruby.rb'  #load from gem
end

現在のファイルに相対的な「visualruby.rb」という名前のファイルがあるかどうかを確認する必要があります。これは、開発中に、インストールされている gem の「visualruby.rb」のバージョンが常に検出されるためです。 、効果はありません。変更を機能させるには、開発プロジェクトからバージョンを強制的にロードする必要があります。

また、私の IDE はゼロからプロジェクトを作成するので、これに対する一般的な解決策を知っておくとよいでしょう。すべてのプロジェクトで一貫したプロジェクト ファイル システムを使用したいのですが、それが可能かどうかはわかりません。すべてのプロジェクトに対して「requires.rb」というファイルを作成するという一般的な解決策がありましたが、すべてのプロジェクトで同じファイル名が $LOAD_PATH に追加されるため、うまくいかないと思います。

一貫したファイル構造を作成して開発し、rubygem を作成する方法を理解するのを手伝ってください。

4

1 に答える 1

0

私は自分の質問に対する答えを見つけました:

問題は、rubygems API を使用して ruby​​gems をインストールしていたことです。

Gem::Installer.new(file_name)

これにより、パスを台無しにするsyslinkが作成されました。syslinks の代わりにラッパーを作成するオプションがあり、それが標準的なインストール方法のようです:

Gem::Installer.new(file_name, :wrappers => true)

これで、ラッパーが gem の bin ディレクトリにコピーされ、正しいパスが使用されます。これで、gem にできるユニバーサル ファイルを取得できます。そして、すべてが開発中と gem で同じように実行されます。

ハッピーエンド...

于 2012-04-10T06:55:16.647 に答える