我正在爲命令行使用創建一個gem,我知道if __FILE__ == $0
方法用於確定正在運行的文件是否是當前文件(來自Run code only if script called from the command line),但這在我的情況下不起作用。我有一個具有初始化函數的模塊,我希望在從命令行調用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
測試我的應用程序,並打印出來的那一刻__FILE__
和$0
變量分別給我bin/myapp
和path/to/lib/myapp.rb
,所以我想最好的辦法就是檢測是否被要求或直接調用該模塊是什麼。我是否做對了?我是一個Ruby新手。 :-)
'無論模塊是需要還是直接調用'而不是什麼? – sawa
不清楚'initialize函數返回錯誤是什麼意思,因爲沒有從命令行發送參數。 – sawa
我已經更新了這個問題,以澄清。 – Ben