Ruby on rails 如何检查将script/runner作为shebang的ruby脚本的语法?

Ruby on rails 如何检查将script/runner作为shebang的ruby脚本的语法?,ruby-on-rails,ruby,shebang,syntax-checking,Ruby On Rails,Ruby,Shebang,Syntax Checking,我在检查包含rails脚本/runner的ruby脚本的语法时遇到了问题 以下是两个示例脚本以及它们如何响应ruby语法检查: 脚本hello\u world\u runner.rb: #!/usr/bin/env script/runner p "Hello world!" 脚本hello\u world.rb #!/usr/bin/env ruby p "Hello world!" 下面是我如何检查语法的。第一行是命令,第二行是输出 $ ruby -c hello_world_runne

我在检查包含rails脚本/runner的ruby脚本的语法时遇到了问题

以下是两个示例脚本以及它们如何响应ruby语法检查:

脚本
hello\u world\u runner.rb

#!/usr/bin/env script/runner
p "Hello world!"
脚本
hello\u world.rb

#!/usr/bin/env ruby
p "Hello world!"
下面是我如何检查语法的。第一行是命令,第二行是输出

$ ruby -c hello_world_runner.rb 
"Hello world!"

$ ruby -c hello_world.rb 
SYNTAX OK

您可以像这样重写脚本:

轨道2:

#!/usr/bin/env ruby
require File.expand_path(Dir.pwd + '/config/boot',  __FILE__)
require RAILS_ROOT + '/config/environment'
p "Hello world!"
轨道3:

#!/usr/bin/env ruby
require File.expand_path(Dir.pwd + '/config/boot',  __FILE__)
require File.expand_path(Dir.pwd + '/config/application',  __FILE__)
Rails.application.require_environment!
p "Hello world!"
当然,您需要定义自己的(绝对)路径或从Rails根目录运行此脚本

$ ruby -c ./test.rb 
Syntax OK
你可以试试这个

tail -n +2 hellow_world_runner.rb | ruby -c

不理想,但应该可以工作。

我强烈建议您将这些脚本中的大部分代码考虑到核心域模型/lib目录等中。这将允许您以与测试应用程序其余部分相同的方式测试脚本逻辑(这也将检查语法)并将可执行文件的实际内容减少到一两行。

ruby命令行有以下两个标志,我使用:

ruby -wc test.rb

这里有一个小骗局:

$ ruby -wc <(cat <(echo ruby) hello_world_runner.rb)
Syntax OK
$ruby-wc