コマンドラインで使用するgemを構築してif __FILE__ == $0
います.実行中のファイルが現在のファイルであるかどうかを判断する方法を認識しています(コマンドラインからスクリプトが呼び出された場合にのみコードを実行する)。場合。コマンドラインからgemが呼び出されたときに実行したい初期化関数を含むモジュールがあります。
module MyApp
def self.initialize
# do command line stuff
end
def self.test
# run a rake test
end
end
MyApp::initialize
ただし、実行rake test
すると、エラーを返す初期化関数が呼び出されます。
/Library/WebServer/Documents/myapp ❤ rake test
Options:
-v, --[no-]verbose Run verbosely
-h, --help Show this message
rake aborted!
Command failed with status (255): [ruby -I"lib" -I"/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/gems/rake-10.1.0/lib" "/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/gems/rake-10.1.0/lib/rake/rake_test_loader.rb" "test/test_myapp.rb" ]
/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in `eval'
/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
MyApp:initialize
これは、コードからそれを取り除くと期待どおりに実行されるため、実行しているためだと思いますrake test
が、コマンド ライン ツールは機能しなくなります。
現在、私は を介してアプリをテストしており、変数およびbundle exec bin/myapp
を出力すると、それぞれ および が得られるため、モジュールが必要か直接呼び出されているかを検出する最善の方法は何かと考えていました。私はこれを正しくやっていますか?私はRubyの初心者です。:-)__FILE__
$0
bin/myapp
path/to/lib/myapp.rb