2012-08-23 24 views
1

當我開始編寫我的sinatra應用程序時,我從未使用過它。請注意,我曾經並且仍然沒有使用RoR的經驗。我有一個.rb文件和一個.haml,很高興。現在,隨着整個應用程序變得越來越複雜,我必須將.rb文件分割成大約10個「庫」文件。如何將(sql)數據庫添加到我的sintra應用程序中?

我在csv文件中存儲了一些應用程序日誌/信息,現在我在訪問csv文件時發生衝突。所以我認爲我需要引入「適當的」數據庫解決方案。我希望它成爲我的ruby(sinatra)應用程序的一部分。

如何將'light'sql數據庫引入到我的sintra應用程序中?


我對紅寶石1.8.7(2010-08-16 PATCHLEVEL 302)[I386-的mingw32]很快升級到1.9(希望)

回答

2

我建議在看Sequel。它非常靈活和強大,並且可以與SQLite,MySQL,Postgres,Oracle和其他DBM一起使用。對於你如何與數據庫進行交談並不認爲。您可以將其用作ORM或簡單的數據集,並允許使用嵌入式SQL或更多編程方法。

+0

我以爲會有一個(SQL)數據庫本站由紅寶石或不是一個好主意一些示例代碼?我認爲我可以將所有東西放在一個包裏。 – Radek

+0

?用Ruby編寫的數據庫?爲什麼?使用經過驗證的工具,不要重新發明輪子。 ORM層使得與各種DBM一起工作變得非常容易,並且如果您智能地編寫代碼,您可以根據自己的代碼進行切換,而無需重寫。 –

1

對於ORM,建議使用ActiveRecord和Sequel。關於數據庫,我想sqlite3會足夠滿足您的需求。你也可以選擇mysql或者pg。

如果你想使用active_record,你會發現這個article非常有用。 如果續集是選擇,請閱讀續集文件here

安裝了寶石之後。你可以開始編寫一些代碼來連接數據庫。然後,也許一些遷移任務來建立數據庫表(不要忘記建立一些相應的模型)。兩個gem都有類似的遷移語法。之後,導入您的CSV數據,並做好。

0

我在使用Active RecordDataMapper添加對象持久性到我的Sinatra應用程序時沒有問題。人們也告訴我Sequel是非常好的,但哲學上它不是世界上除了Active Record恕我直言。

Active RecordSequel青睞更數據庫爲中心方法,由此你拼出你的表,因爲遷移文件的集合在一組數據庫和表定義,並將它們合併成一個模式,然後將其用於建立或更新你的數據庫表。如果你真的關心底層的SQL數據庫,那麼其中一個就是給你的。我發現他們是六個,另一個是六個。

DataMapper更多以對象爲中心並允許您在對象自己的類定義中定義所需的屬性和對象關係;然後當您的應用程序啓動時,請確保您撥打DataMapper.auto_upgrade!並升級數據庫以適合您的對象圖。好處是你只有一個地方可以找到你的對象可能擁有的屬性。缺點是你對底層數據庫的細節控制較少,儘管緊密定義映射並不是不可能的,但當你關心數據庫表上的對象圖時,DataMapper可以很好地工作。

好消息是,他們幾乎都以同樣的方式工作,一旦你有你的從對象圖到SQL數據庫表的映射定義。所有支持惰性或先佔式加載對象的相關集合,many_to_many關係,多態性等,並且往往僅在配置和播種細節方面有所不同。

我經常使用DataMapper開始項目,只是因爲它的拋出和拆除數據庫模式的速度,因爲應用程序的對象圖仍然在變化中;模式已經安定下來時,我很快重構以使用Active Record。下一個項目我想我會給Sequel,儘管人們似乎對此大加讚賞。

+0

續集並不關心你是否以編程方式即時創建表格,或者可以使用遷移。 [示例文檔](http://sequel.rubyforge.org/rdoc/files/README_rdoc.html)顯示,在第一對情侶線。 –

0

我已經成功地使用了與Sinatra的數據映射器,就像其他帖子一樣,你也可以使用Sequel和Active Record。可能使用Active Record的一個好處是,如果你確實想要使用/學習ROR,Active Record是默認的ORM,所以這可能是你想要考慮的事情。

如果你不想走ORM路線,你總是可以使用SQL-Ruby gem,這將允許你創建和運行sql查詢。下面是從網站http://sqlite-ruby.rubyforge.org/

require 'sqlite' 

db = SQLite::Database.new("data.db") 

db.execute("select * from table") do |row| 
    p row 
end 

db.close 
相關問題