1

当我开始编写我的 sinatra 应用程序时,我以前从未使用过它。请注意,我曾经并且仍然没有使用 RoR 的经验。我有一个 .rb 文件和一个 .haml 并且很高兴。现在我不得不将 .rb 文件拆分为大约 10 个“库”文件,因为整个应用程序变得越来越复杂。

我将一些应用程序日志/信息存储在 csv 文件中,现在我在访问 csv 文件时遇到了冲突。所以我认为我需要引入“适当的”数据库解决方案。我希望它成为我的 ruby​​ (sinatra) 应用程序的一部分。

如何在我的 sintra 应用程序中引入“轻量级”sql 数据库?


我正在使用 ruby​​ 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32] 即将升级到 1.9 (希望如此)

4

4 回答 4

3

我建议看Sequel。它非常灵活和强大,可以很好地与 SQLite、MySQL、Postgres、Oracle 和其他 DBM 配合使用。它对你如何与数据库交谈并不固执己见;您可以将其用作 ORM 或简单的数据集,并允许嵌入式 SQL 或更多编程方法。

于 2012-08-23T07:12:15.313 回答
1

对于 ORM,建议同时使用 ActiveRecord 和 Sequel。关于数据库,我想 sqlite3 足以满足您的需要。你也可以选择mysql或pg。

如果你想使用 active_record,你会发现这篇文章非常有用。如果选择 Sequel,请在此处阅读 Sequel 文档。

宝石安装后。您可以开始编写一些代码来连接数据库。然后可能会进行一些迁移任务来构建数据库表(并且不要忘记构建一些相应的模型)。两个 gem 具有相似的迁移语法。之后,导入您的 csv 数据并做得很好。

于 2012-08-23T07:50:27.133 回答
0

Active Record我在使用任何一个或DataMapper将对象持久性添加到我的应用程序时都没有遇到任何问题Sinatra。人们也告诉我Sequel非常好,但从哲学上讲,它与Active Record恕我直言并非没有世界。

Active RecordSequel支持一种更加以数据库为中心的方法,即您将表拼写为迁移文件集合中的一组数据库和表定义,并将它们合并到一个模式中,然后用于构建或更新您的数据库表。如果您真的关心底层 SQL 数据库,那么其中之一就是给您的。我发现它们是一个中的六个,另一个是六个。

DataMapper更加以对象为中心,允许您在对象自己的类定义中定义所需的属性和对象关系;然后当您的应用程序启动时,请确保您调用DataMapper.auto_upgrade!并升级数据库以适合您的对象图。好处是您只有一个地方可以查找您的对象可能具有的属性。缺点是您对底层数据库的细节控制较少,尽管严格定义映射并非不可能,DataMapper当您关心数据库表上的对象图时效果很好。

SQL好消息是,一旦您定义了从对象图到数据库表的映射,它们几乎都以相同的方式工作。所有这些都支持相关对象集合、many_to_many 关系、多态性等的延迟或抢先加载,并且往往仅在配置和播种细节方面有所不同。

我经常使用DataMapper它启动和拆除数据库模式的速度来启动项目,因为应用程序的对象图仍在不断变化;Active Record当架构稳定下来时,我会快速重构以使用。下一个项目我想我会Sequel试一试,因为人们似乎对它赞不绝口。

于 2012-08-23T08:09:48.377 回答
0

我在 Sinatra 中使用 datamapper 取得了成功,就像其他帖子一样,您也可以使用 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
于 2012-08-23T12:46:26.357 回答