2011-06-07 48 views
1

为什么我不能在Sinatra的路线之外使用@env['REMOTE_ADDR']为什么我不能在路线外使用@env ['REMOTE_ADDR']?

我想有可用的客户端的IP我的整个西纳特拉的应用程序,所以我可以在任何地方使用它...

clients_ip = @env['REMOTE_ADDR'] 

    get '/' do 
    .. show something .. 
    clients_ip 
    end 
    get '/page1' do 
    .. show something .. 
    clients_ip 
    end 

回答

2

只有在响应请求运行路径块。外部代码在处理程序设置时运行一次。

而不是使用一个变量,你可以做一个你想要的方法,这确保@env查找是在正确的范围内完成的。

def clients_ip 
    @env['REMOTE_ADDR'] 
end 

get '/' do 
    # ... show something ... 
    clients_ip 
end 
+0

确定,我怎样可以定义'咆哮= Growl.new(@env [ 'REMOTE_ADDR'], “红宝石咆哮”,[ “红宝石咆哮通知”])'所以可以用它在任何路线? – Radek 2011-06-07 05:02:36

+1

做同样的事情:'def咆哮; Growl.new(...);结束' – Theo 2011-06-07 05:09:25

+0

它有点出于我的想法...班级,班级,班级....让我试试它是如何工作的.... – Radek 2011-06-07 05:13:09

相关问题