我正在为命令行使用创建一个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