Ruby 仅在方法执行时运行该方法的命令行脚本?
我正在构建一个供命令行使用的gem,我知道用Ruby 仅在方法执行时运行该方法的命令行脚本?,ruby,command-line,Ruby,Command Line,我正在构建一个供命令行使用的gem,我知道用if\uuuuu FILE\uuuu==0方法来确定正在运行的文件是否是当前文件(从),但是在我的情况下,这不起作用。我有一个带有初始化函数的模块,我希望在从命令行调用gem时运行该模块 module MyApp def self.initialize # do command line stuff end def self.test # run a rake test end end
if\uuuuu FILE\uuuu==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
时,它调用initialize函数,该函数返回一个错误:
/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)
/Library/WebServer/Documents/myapp❤ 耙试验
选项:
-v、 --[no-]详细详细地运行
-h、 --帮助显示此消息
雷克流产了!
命令失败,状态为(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\u test\u loader.rb”“test/test\u myapp.rb”]
/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/bin/ruby\u noexec\u包装:14:in'eval'
/Users/bbriggs/.rvm/gems/ruby-2.0.0-p195/bin/ruby\u noexec\u包装:14:in`'
任务:TOP=>test
(通过使用--trace运行任务查看完整跟踪)
我想这是因为我正在做MyApp:initialize
,因为如果我从代码中去掉它,rake测试将按预期运行,但命令行工具不再工作
目前,我正在通过bundle exec bin/myapp
测试我的应用程序,并打印出\uuuuu文件
和$0
变量分别给我bin/myapp
和path/to/lib/myapp.rb
,因此我想知道检测模块是否需要或直接调用的最佳方法是什么。我做得对吗?我有点像红宝石新手。:-) 终于找到了答案。我没有在lib/MyApp.rb
中运行MyApp:initialize
,而是将它放在bin/MyApp
文件中。这确保了它仅在从命令行运行应用程序时运行,而不是在通过Rake进行测试或其他脚本需要时运行。是否需要或直接调用模块
,与之相反的是什么?不清楚您所说的初始化函数是什么意思,该函数返回一个错误,因为没有参数被调用从命令行发送。我更新了问题以澄清。我看不出您在哪里使用您提到的\uuu文件\uuu==0
代码。我将其放在脚本的底部,但因为\uu文件\uuu
和$0
并不等于它不运行的相同内容。