gpt4 book ai didi

ruby-on-rails - 如何通过 database.yml(或其他)在 ruby​​/sinatra 中引用 tiny_tds 连接?

转载 作者:太空狗 更新时间:2023-10-30 01:57:48 27 4
gpt4 key购买 nike

我正在尝试弄清楚如何从数据库中提取数据,而无需在每个 ruby​​ 文件的顶部放置连接字符串。

我正在通过我正在组装的一个 Sinatra 小应用程序学习 ruby​​ 的基础知识,该应用程序可以从 MSSQL 数据库中提取数据。

到目前为止,我已经成功地创建了各种简单的 erb 页面,这些页面通过在每个文件的顶部使用以下代码结构来显示来自 MSSQL 数据库的数据:-

<% client = TinyTds::Client.new(:username => 'name', :password => 'password', :dataserver => 'hostname', :database => 'database') %>

<% data = client.execute("SELECT * from tablename") %>

从书籍、指南和在线教程中,我发现基于大量与 PostgreSQL 或 MySQL 数据库有关的配置,在我看来,我需要创建一个中央文件来存储我的连接数据(例如数据库。 yml 文件),然后在我的应用中以某种方式引用它。

这是否正确,我是否应该在我的 main.rb 文件中这样做,以便我的每个 .erb 文件都不需要连接字符串,或者我是否还必须在每个 .erb 文件中引用数据库?

我注意到创建数据库配置变量的引用,例如:-

db_config = YAML.load(File.Open("/path_to_file/database.yml")) [ENV['RAILS_ENV']]

但这显然适合 Rails 应用。

我可以为我的 sinatra 驱动的“应用程序”做类似的事情吗?

谢谢。

最佳答案

这应该有效:

require "sinatra"
require "sinatra/config_file"

config_file 'path/to/config.yml'

DB = TinyTds::Client.new(
:username => settings.name,
:password => settings.password,
:dataserver => settings.hostname,
:database => settings.database
)

get '/' do
@result = DB.do_stuff
haml :index
end

不过,我建议您寻找支持 TinyTDS 的 ORM,并使用它来设置数据库连接和运行查询。我用 Sequel很多I know it supports TinyTDS ,但我相信其他人也会这样做。

我还建议不要将诸如数据库设置之类的内容放入要 checkin 源代码管理的文件中,因为它是敏感信息。生产环境我比较喜欢把这种东西放到环境变量里,开发环境用config文件加载环境变量(为了方便)。使用上面的例子:

DB = TinyTds::Client.new(
:username => ENV["name"],
:password => ENV["password"],
:dataserver => ENV["hostname"],
:database => ENV["database"]
)

这些 env 变量被加载到生产服务器的内存中,这使它们更加安全。对于开发,我在启动 Sinatra 之前加载 YAML 文件,将每个值添加到 ENV var。我并不是说这是一种标准方式,但我就是这样做的。

关于ruby-on-rails - 如何通过 database.yml(或其他)在 ruby​​/sinatra 中引用 tiny_tds 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16648623/

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