2012-03-09 20 views
3

私は、ユーザーがインストールしてコマンドラインのrubyツールを使ってサービスとやりとりできるルビーの宝石を書いています。サービスを開始および停止できます(子プロセスを起動します)。ruby​​ gemコマンドラインサービスをどのように構築すればよいですか?

私は、ØMQ/ EventMachineなどのネットワークサービスを作成するのに使う最高のものをたくさん研究しており、コマンドラインで使用できるバイナリをインストールするRuby gemを作成する方法を学びましたしかし、私は良いコード構造を設定するのに苦労しています。

私のコマンドラインユーティリティはさまざまな引数をとります(私はTrollopを使用します)、それはさまざまなクラスを使用してさまざまなルビの宝石を使います。

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

答えて

8

大部分、RubyGemsがこれを処理します。実行可能ファイルをfilesのリストに含めて、gemspecのexecutablesに入れておく必要があります。例えば、あなたのディレクトリにbinであなたの実行可能ファイルを置くために、共通のそれをです:

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

あなたgemspecはその後、次のようになります。ユーザーはRubyGemsのを経由してあなたのアプリをインストールする際、myappはなり、この時点で

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 

彼らのパスに、そしてあなたの実行可能ファイルが、単純に始めることができるように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/myapp、これはlibをロード・パスに入れます。

0

すべての宝石は本質的にオープンソースなので、例のためにもっと良いものをいつも見ることができます。 jewelerhoeのような宝石師を使用すると、組織的に話す基本的な構造のいくつかが設定されます。

+3

"ソースが利用可能"の方が良いかもしれません。ソースコードが「オープンソース」のソフトウェアであるとは限りません。 –

+0

ありがとう、私はそれらを見てみましょう!私は日々ルビー開発者ではないので、私は良い足場を得るために苦労しています。 – tarnfeld

+0

私は意図的に難読化されているものはわからないので、もっと「オープンソース」を意味しました。これは、「オープンソース」と「フリーのオープンソース」が異なるところです。それでも、宝石の大半は何らかのオープンソースライセンスで公開されています。 – tadman

4

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

簡単に言えば:

は、宝石のプロジェクト

$ bundle gem myapp 
$ cd myapp 

追加に実行可能ファイルを生成するバンドラー

$ gem install bundler 

使用バンドラーをインストール

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

    require 'myapp' 

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

$ mycommand 
Executing mycommand 

$ rake release 
をrubygems.orgであなたのユーティリティを共有し、あなたのスクリプトを実行し

$ rake install 

あなたの宝石をインストールします。

その他のドキュメントthe website

関連する問題