2009-11-28 6 views
7

Ich weiß nicht, ob das eine Rubinfrage oder eine Sinatra-Frage ist, weil ich für beide neu bin. Der folgende Code funktioniert nicht und ich verstehe warum, weil die erste my_variable lokal für ihren Block ist. Ich kenne einfach nicht die Syntax, um es richtig zu machen.Wo setze ich Code in Sinatra (Ruby Web Framework), den ich nur einmal ausführen möchte?

EDIT1 - das folgende funktioniert, aber dann bin ich verwirrt über den richtigen Zweck des configure-Blocks.

require 'rubygems' 
require 'sinatra' 

my_variable = "world" 

get '/' do 
    "Hello " + my_variable 
end 

Antwort

7
require 'rubygems' 
require 'sinatra' 

set :my_variable, "world" 

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

Ich denke, ich bin verwirrt über den Zweck eines Sinatra Config Block versus etwas außerhalb eines Blocks zu tun. –

+2

Optionen sind Einstellungen auf Anwendungsebene, während die Konfiguration das Anpassen des Verhaltens an die aktuelle Umgebung ermöglicht. –

+0

configure ist nur ein Codeblock, der einmal ausgeführt wird. –

0

Eine andere Möglichkeit ist:

require 'rubygems' 
require 'sinatra' 

@my_variable="world" 

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

Ich empfehle nicht, eine Instanzvariable zu verwenden, weil nicht klar ist, welches Objekt die Instanzvariable betrifft. –

0

Ich würde eine Klassenvariable gesetzt - zB. @@my_variable - innerhalb des Konfigurationsblocks. Der configure-Block existiert für den Code, den Sie beim Start ausführen möchten, daher ist es sinnvoll, die Variable festzulegen. Ihre Sinatra-Anwendung ist eine Unterklasse von Sinatra::Base, daher erscheint es sinnvoll, in dieser Situation eine Klassenvariable zu verwenden.

3

Konfigurieren Block ist nur zur App-Konfiguration verwandt. Wenn das ist, was es ist, sollten Sie es richtig kapseln:

require 'sinatra' 

configure do 
    set :my_option, "world" 
end 

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

Gut, aber es ist nicht mehr "Optionen", es ist "Einstellungen". – pje

Verwandte Themen