2013-05-20 28 views
4

我想弄清楚如何從數據庫中提取數據,而不需要在每個ruby文件的頂部放置連接字符串。如何通過database.yml(或其他)通過ruby/sinatra引用tiny_tds連接?

我正在通過一個小的Sinatra應用程序來學習ruby的基礎知識,我將它們從MSSQL數據庫中提取數據。

到目前爲止,我已經成功地創建通過使用下面的代碼結構,在每個文件的頂部從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'做類似的事嗎?

謝謝。

+1

看看這個:[Sinatra Config File](http://www.sinatrarb.com/contrib/config_file.html)。這可能是因爲你只是想自己嘗試這個學習,只是說,然後我相信你會在下面得到更詳細的答案。順便說一句,'YAML'也有'load_file'方法,我不確定爲什麼所有的Rails應用程序都繼續使用'load'和'File.open'。 – iain

+0

謝謝伊恩,我已經閱讀了你提供的鏈接,這很好理解。我不知道它是如何幫助我的,因爲我還沒有設置一個配置文件,然後從它拉動值創建數據庫連接之間的飛躍...... – lad33

+0

...我想我在試圖要說的是,好吧,我可以將我的數據庫連接設置放入一個config.yml文件中,然後在我的main.rb文件中引用它。然後如何創建客戶端= TinyTds.Client.new(......),並在main.rb應用程序文件中執行? – lad33

回答

1

這應該工作:

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變量。我並不是說這是一種標準的方式,但是我是這麼做的。

+0

謝謝Iain,這是非常好的建議,使用環境變量是我希望能夠做到的事情! – lad33

+0

我今天也一直在閱讀關於續集的文章,看起來不錯,而且是一個絕妙的建議,再次感謝。 – lad33

+0

@ lad33沒問題,很高興你有事情發展。 – iain