2009-11-28 23 views
7

我不知道這是紅寶石問題或Sinatra的問題,因爲我是新來的兩個。下面的代碼不起作用,我明白爲什麼,因爲第一個my_variable是本地塊。我只是不知道讓它正確的語法。我在哪裏可以將代碼放在Sinatra(ruby web框架)中,我只想執行一次?

require 'rubygems' 
require 'sinatra' 

configure do 
    my_variable = "world" 
end 

get '/' do 
    "Hello " + my_variable 
end 

EDIT1 - 下面的工作,但後來我猜我對配置塊的正確目的感到困惑。

require 'rubygems' 
require 'sinatra' 

my_variable = "world" 

get '/' do 
    "Hello " + my_variable 
end 

回答

7
require 'rubygems' 
require 'sinatra' 

set :my_variable, "world" 

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

我猜,我感到困惑的一個Sinatra的配置塊與塊之外做一些事情的目的。 – 2009-11-28 15:02:53

+2

選項是應用程序級別設置,而配置允許您根據當前環境自定義行爲。 – 2009-11-28 15:08:35

+0

配置只是一個將被執行一次的代碼塊。 – 2009-12-01 14:29:10

0

另一種方式是:

require 'rubygems' 
require 'sinatra' 

@my_variable="world" 

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

我不推薦使用實例變量,因爲它不清楚實例變量影響的對象。 – 2012-12-27 14:22:14

0

我會成立一個類變量 - 例如。 @@my_variable - 在配置塊內。配置塊存在於你想在啓動時運行的代碼,因此設置你的變量是有意義的。你的Sinatra應用程序是Sinatra::Base的子類,所以在這種情況下使用類變量似乎是合適的。

3

配置塊僅僅是相關的應用程序配置。如果這事情是什麼,你應該將其封裝正確:

require 'sinatra' 

configure do 
    set :my_option, "world" 
end 

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

好,但它不再是「選項」,它是'settings'。 – pje 2012-12-05 16:22:30

相關問題