Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 仅在方法执行时运行该方法的命令行脚本?_Ruby_Command Line - Fatal编程技术网

Ruby 仅在方法执行时运行该方法的命令行脚本?

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

我正在构建一个供命令行使用的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

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
并不等于它不运行的相同内容。