2011-09-12 5 views
18

Tengo problemas para verificar la sintaxis de los scripts de ruby ​​que tienen los rieles script/runner en su shebang.¿Cómo comprobar la sintaxis de la secuencia de comandos de ruby ​​que tiene script/runner como shebang?

Éstos son dos ejemplos de scripts y la forma en que las respuestas a Ruby comprobación de sintaxis:

Guión hello_world_runner.rb:

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

Guión hello_world.rb

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

Aquí es cómo intento para comprobar la sintaxis . La primera línea es un comando y una segunda línea es una salida.

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

$ ruby -c hello_world.rb 
SYNTAX OK 

Respuesta

5

Puede volver a escribir el guión de esta manera:

Carriles 2:

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

Rails 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!" 

Por supuesto, es necesario definir su propio (absoluta) rutas o ejecute este script desde Rails root.

$ ruby -c ./test.rb 
Syntax OK 
12

Puede probar este

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

No es ideal, pero debe trabajar.

2

Recomiendo encarecidamente que factorice la mayoría del código en esos scripts en sus modelos de dominio principal/directorio lib/etc. Esto le permitirá probar la lógica del script de la misma manera que prueba el resto de su aplicación (que también terminará revisando la sintaxis) y reducirá el contenido real del archivo ejecutable a una línea o dos.

2

La línea de comandos de rubí tiene estas 2 banderas que pueden ayudar, yo uso:

ruby -wc test.rb 
1

aquí es un poco tramposo:

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

Básicamente ruby corrector de sintaxis esperan que la palabra ruby en el primera línea (shebang).

Cuestiones relacionadas