質問

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

ØMQ/ EventMachineなどのネットワークサービスを書くために使用する最善のことを多くの研究をしました。しかし、私は良いコード構造を選択するのに苦労しています。

My Command Lineユーティリティはさまざまな引数を取ります( trollop )とそれを使用します。物事をやるためのクラス、そして他のさまざまなRuby Gemsを使用してください。

クラスファイルを置く場所と私のバイナリにそれらを必要とする方法はよくわかりませんので、パスは正しいです。

役に立ちましたか?

解決

主に、Rubygemsはあなたのためにこれを大事にします。 filesリストに実行可能ファイルを含める必要があり、GEMSpecのexecutablesに入れる必要があります。実行可能ファイルをあなたのディレクトリに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を実行してアプリを実行することはできません。一部のDEVは、$:または$LOAD_PATHを介してロードパスを操作しますが、これは不良形式と見なされます。

Bundlerを使用している場合は、bundle execでローカルにアプリを実行するのが最も簡単です。 bundle exec bin/myapp。 ARUBYLIB環境変数を交互に使用することができます。 RUBYLIB=lib bin/myapp

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top