我正在通过一个小的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数据库的许多配置我发现的书籍,指南和在线教程,在我看来,我需要创建一个中央文件来存储我的连接数据(例如database.yml文件)然后在我的应用程序中以某种方式/某种方式引用它.
这是正确的,我应该在我的main.rb文件中这样做,以便我的每个.erb文件不需要连接字符串或我还必须在每个.erb文件中引用数据库吗?
我注意到创建数据库配置变量的引用,例如: –
db_config = YAML.load(File.Open("/path_to_file/database.yml")) [ENV['RAILS_ENV']]
但这显然适合Rails应用程序.
我可以为我的sinatra驱动的“app”做类似的事吗?
谢谢.
这应该工作: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,但我相信其他人也会这样做.
我还建议不要将数据库设置之类的东西放入一个被检入源代码控制的文件中,因为它是敏感信息.我更喜欢将这种东西放入环境变量进行生产,并使用配置文件在开发中加载环境变量(为方便起见).使用上面的例子:
DB = TinyTds::Client.new( :username => ENV["name"], :password => ENV["password"], :dataserver => ENV["hostname"], :database => ENV["database"] )
这些env变量被加载到生产服务器的内存中,这使它们更安全一些.为了开发,我在启动Sinatra之前加载YAML文件,将每个值添加到ENV var.我并不是说这是一种标准方式,但我就是这样做的.
精彩评论