4

ユーザーがインストールしてコマンドライン Ruby ツールを使用してサービスと対話できる Ruby Gem を作成しています。サービスを開始および停止できます (子プロセスが生成されます)。

ØMQ/EventMachine など、ネットワーク サービスを作成するのに最適なものについて多くの調査を行い、コマンド ラインで使用できるバイナリをインストールする Ruby gem の作成方法を理解しましたが、良いコード構造を設定するのに苦労しています。

私のコマンド ライン ユーティリティはさまざまな引数を取り (私はTrollopを使用します)、さまざまなクラスを使用して処理を行い、他のさまざまな ruby​​ gem を使用します。

クラス ファイルをどこに置くべきか、パスが正しいようにバイナリで要求する方法がわかりません。

4

3 に答える 3

9

主に、RubyGemsがこれを処理します。実行可能ファイルをfilesリストに含めexecutables、gemspecのに入れる必要があります。実行可能ファイルをディレクトリに配置するのが一般的ですbin。例:

$ ls
bin/   myapp.gemspec  lib/    Rakefile
$ ls bin
bin/myapp

gemspecは次のようになります。

Gem::Specification.new do |s|
  s.name = 'myapp'

  # whatever else is in your gemspec

  s.files = ["bin/myapp","lib/myapp.rb"]  # or whatever other files you want
  s.executables = ["bin/todo"] 
end

この時点で、ユーザーがRubyGemsを介してアプリをインストールするmyappと、パスにlib含まれ、アプリのロードパスに含まれるため、実行可能ファイルは次のように開始できます。

#!/usr/bin/env ruby

require 'myapp'
# whatever other requires

bin/myappこれに関する唯一の問題は、開発中に、アプリを実行するだけでは実行できないことです。$:一部の開発者はまたはを介してロードパスを操作します$LOAD_PATHが、これは不適切な形式と見なされます。

bundlerを使用している場合はbundle exec、たとえばを使用してアプリをローカルで実行するのが最も簡単ですbundle exec bin/myapp。代わりに、ロードパス に配置されるRUBYLIB環境変数などを使用することもできます。RUBYLIB=lib bin/myapplib

于 2012-03-09T23:23:35.767 に答える
4

Bundlerで gem プロジェクト構造を生成できます。

簡単に言うと:

バンドラーをインストールする

$ gem install bundler

Bundler を使用して gem プロジェクトを生成する

$ bundle gem myapp
$ cd myapp

実行可能ファイルを追加する

$ mkdir bin
$ cat > bin/mycommand << EOSCRIPT
  #!/usr/bin/env ruby

  require 'myapp'

  puts "Executing myapp"
  EOSCRIPT
$ chmod +x bin/mycommand

Gem をインストールする

$ rake install

スクリプトを実行します

$ mycommand
Executing mycommand

rubygems.org でユーティリティを共有する

$ rake release

ウェブサイト上のその他のドキュメント

于 2013-04-14T07:37:01.277 に答える
0

すべての gem は本質的にオープン ソースであるため、例として優れたものをいつでも見ることができます。jewelerorのような gem ビルダーを使用するhoeと、組織的に言えば、基本的な構造のいくつかが設定されます。

于 2012-03-09T21:24:27.710 に答える