在Sinatra中,我无法创建在应用程序生命周期中仅被分配了一次值的全局变量。我想念什么吗?我的简化代码如下所示:
require 'rubygems' if RUBY_VERSION < "1.9"
require 'sinatra/base'
class WebApp < Sinatra::Base
@a = 1
before do
@b = 2
end
get '/' do
puts @a, @b
"#{@a}, #{@b}"
end
end
WebApp.run!
这导致
nil
2
在终端中,在浏览器中为
,2
。如果我尝试将
@a = 1
放入initialize
方法中,则在WebApp.run!
行中出现错误。我感到缺少了一些东西,因为如果我没有全局变量,那么如何在应用程序实例化期间加载大数据?
似乎每当客户端发出请求时,就会调用
before do
。 最佳答案
class WebApp < Sinatra::Base
configure do
set :my_config_property, 'hello world'
end
get '/' do
"#{settings.my_config_property}"
end
end
请注意,如果您使用Shotgun或其他一些在每个请求上重新加载代码的Rack运行器工具,则每次都会重新创建该值,并且看起来好像并非仅分配了一次。在生产模式下运行以禁用重新加载,您将看到它仅在第一个请求上分配(您可以使用
rackup --env production config.ru
进行此操作)。关于ruby - 在Sinatra(Ruby)中,如何创建在应用程序生命周期中仅被分配了一次值的全局变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4525482/