Как проверить синтаксис сценария ruby, который имеет скрипт / бегун в качестве шебанга? - PullRequest
18 голосов
/ 12 сентября 2011

У меня проблемы с проверкой синтаксиса сценариев ruby, в которых есть скрипт / бегунок rails на своем шебанге.

Вот два примера скриптов и их ответы на проверку синтаксиса ruby:

Сценарий hello_world_runner.rb:

#!/usr/bin/env script/runner
p "Hello world!"

Сценарий hello_world.rb

#!/usr/bin/env ruby
p "Hello world!"

Вот как я пытаюсь проверить синтаксис. Первая строка - это команда, а вторая строка - это вывод.

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

$ ruby -c hello_world.rb 
SYNTAX OK

Ответы [ 5 ]

13 голосов
/ 08 ноября 2011

Вы можете попробовать это

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

Не идеально, но должно работать.

5 голосов
/ 12 сентября 2011

Вы можете переписать ваш скрипт так:

Рельсы 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
3 голосов
/ 19 июня 2014

В командной строке ruby ​​есть два флага, которые могут вам помочь, я использую:

ruby -wc test.rb
2 голосов
/ 07 декабря 2011

Я настоятельно рекомендую вам внести большую часть кода в этих сценариях в ваши основные модели домена / каталог lib / etc. Это позволит вам тестировать логику скрипта так же, как вы тестируете остальную часть вашего приложения (что также в конечном итоге будет проверять синтаксис), и уменьшать фактическое содержимое вашего исполняемого файла до одной или двух строк.

1 голос
/ 10 июня 2016

Вот небольшой чит:

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

В основном ruby Синтаксическая проверка ожидает слово ruby в первой строке (шебанг).

...