gpt4 book ai didi

ruby - 使对象在 sinatra 范围内可用

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:19 25 4
gpt4 key购买 nike

在 sinatra 中我有以下内容:

config = YAML.load_file('sinatra_resources/server.yml')
usernamedk = config["dkuser"]
passworddk = config["dkpass"]
passwordse = config["sepass"]
usernamese = config["seuser"]
database = config["database"]

cpooldk = OCI8::ConnectionPool.new(1, 5, 2, usernamedk, passworddk, database)
cpoolse = OCI8::ConnectionPool.new(1, 5, 2, usernamese, passwordse, database)

当我在 route 使用这些值中的任何一个时,它工作正常。但是我想在函数中使用它们,当我引用这些变量时,等等。

作为我的问题的一个例子,如果我有一个函数

def getuser(lang)
if lang == "se" then
return usernamese
else
return usernamedk
end

在我的路线里面 user = getuser(lang)

然后,当我尝试使用 lang = "se"调用它时,我发现变量 usernamese 未定义。同样的事情适用于我想在多个路由之间共享的函数中使用的所有变量。

我尝试了以下方法: 配置做

set :env, "local"

set :usernamedk, config["dkuser"]
set :passworddk, config["dkpass"]
set :passwordse, config["sepass"]
set :usernamese, config["seuser"]
set :database, config["database"]

set :cpooldk, OCI8::ConnectionPool.new(1, 5, 2, setting.usernamedk, setting.passworddk, setting.database)
set :cpoolse, OCI8::ConnectionPool.new(1, 5, 2, setting.usernamese, setting.passwordse, setting.database)

end

但是我得到了错误 undefined local variable or method `usernamedk' for main:Object (NameError)

最佳答案

当您可以以散列形式访问配置时,为什么还要考虑所有变量?

configure do
# no need to set the env as local if you're trying to affect the scope

config = YAML.load_file('sinatra_resources/server.yml')
set :config, config

set :cpooldk, OCI8::ConnectionPool.new(1, 5, 2, config["dkuser"], config["dkpass"], config["database"])
set :cpoolse, OCI8::ConnectionPool.new(1, 5, 2, config["seuser"], config["sepass"], config["database"])
end

helpers do
def getuser(lang)
if lang == "se" then
settings.config["seuser"] # no need for the explicit returns in Ruby
else
settings.config["dkuser"]
end
end
end

get "/some-route" do
get_user("se")
end

关于ruby - 使对象在 sinatra 范围内可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603667/

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