Подтвердить что ты не робот

Как проверить синтаксис ruby ​​script, который имеет script/runner как shebang?

У меня проблемы с проверкой синтаксиса рубиновых скриптов с рельсами script/runner на его shebang.

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

Script hello_world_runner.rb:

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

Script 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
4b9b3361

Ответ 1

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

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

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

Ответ 2

Вы можете переписать свой script следующим образом:

Рельсы 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!"

Конечно, вам нужно определить свои собственные (абсолютные) пути или запустить этот script из корня Rails.

$ ruby -c ./test.rb 
Syntax OK

Ответ 3

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

Ответ 4

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

ruby -wc test.rb

Ответ 5

Вот немного обманывает:

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

В основном синтаксис проверки ruby ожидает слово ruby в первой строке (shebang).