gpt4 book ai didi

ruby - 在 Sinatra(Ruby) 中,我应该如何创建在应用程序生命周期中只赋值一次的全局变量?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:58 24 4
gpt4 key购买 nike

在 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 runner 工具,那么每次都会重新创建该值,并且看起来好像它不是只分配了一次。在生产模式下运行以禁用重新加载,您会看到它仅在第一次请求时分配(您可以使用例如 rackup --env production config.ru 执行此操作)。

关于ruby - 在 Sinatra(Ruby) 中,我应该如何创建在应用程序生命周期中只赋值一次的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4525482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com