2009-11-28 14 views
7

No sé si esta es una pregunta de Ruby o una pregunta de Sinatra, porque soy nuevo en ambos. El siguiente código no funciona, y entiendo por qué, porque la primera mi_variable es local para su bloque. Simplemente no sé la sintaxis para hacerlo bien.¿Dónde coloco el código en Sinatra (framework web ruby) que solo quiero ejecutar una vez?

require 'rubygems' 
require 'sinatra' 

configure do 
    my_variable = "world" 
end 

get '/' do 
    "Hello " + my_variable 
end 

EDIT1 - funciona lo siguiente, pero supongo que estoy confundido acerca del propósito correcto del bloque de configuración.

require 'rubygems' 
require 'sinatra' 

my_variable = "world" 

get '/' do 
    "Hello " + my_variable 
end 

Respuesta

7
require 'rubygems' 
require 'sinatra' 

set :my_variable, "world" 

get '/' do 
    "Hello " + settings.my_variable 
end 
+1

Supongo que estoy confundido acerca del propósito de un bloque de configuración Sinatra versus hacer algo fuera de un bloque. –

+2

Las opciones son configuraciones de nivel de aplicación mientras que la configuración le permite personalizar el comportamiento de acuerdo con el entorno actual. –

+0

configure es solo un bloque de código que se ejecutará una vez. –

0

Otra forma es:

require 'rubygems' 
require 'sinatra' 

@my_variable="world" 

get '/' do 
    "Hello " + @my_variable 
end 
+0

No recomiendo usar una variable de instancia porque no está claro a qué objeto afecta la variable de instancia. –

0

Me gustaría establecer una variable de clase - por ejemplo. @@my_variable - dentro del bloque de configuración. El bloque de configuración existe para el código que desea ejecutar al inicio, por lo que tiene sentido establecer su variable. Su aplicación Sinatra es una subclase de Sinatra::Base, por lo que parece apropiado usar una variable de clase en esta situación.

3

El bloque de configuración está relacionado con la configuración de la aplicación. Si eso es lo que es, debe encapsularlo correctamente:

require 'sinatra' 

configure do 
    set :my_option, "world" 
end 

get '/' do 
    "Hello #{options.my_option}" 
end 
+4

Bien, pero ya no son 'options', son' settings'. – pje

Cuestiones relacionadas