【问题标题】:How do I configure Sinatra to use structure.sql instead of schema.rb?如何将 Sinatra 配置为使用 structure.sql 而不是 schema.rb?
【发布时间】:2017-03-17 00:50:48
【问题描述】:

我有一个 Sinatra 应用程序,我正在使用 ActiveRecord 设置一个数据库。

由于这个数据库的一个怪癖(即字符串主键),我想使用 SQL 模式(structure.sql)而不是 Ruby 模式(schema.rb)。我不介意这会限制我使用特定的数据库风格,无论如何我们都使用 Postgres。

为了在 Rails 中实现这一点,我会将config.active_record.schema_format = :sql 放入config/application.rb。我如何在 Sinatra 中做同样的事情?

【问题讨论】:

  • 这不是 Sinatra 问题,而是 ActiveRecord 问题。 Sinatra 只是一个无辜的旁观者。
  • 您可能想看看使用 Padrino。它位于 Sinatra 之上,但提供了许多类似 Rails 的生成器和助手。 Sinatra 很棒,可以与 DBM 一起工作,但您最终会编写更多代码。
  • is 是一个 Sinatra 问题,因为虽然很容易在 Rails 框架中找到如何做(如上所述),但这不适用于 Sinatra -或者如果确实如此,则需要进行大量手动设置才能使其应用
  • 不,Sinatra 与 DBM 完全没有联系。您必须合并您选择的数据库连接。通常我们使用 Sequel 或 DataMapper 来做这件事,尽管 ActiveRecord 也可以做到。尽管如此,Sinatra 对数据库一无所知,只有其他 Gems 才知道。 Sinatra 中没有需要关心的方法,只有底层的 Ruby 语言。 Sinatra 是专门用于创建 URL 处理程序的 DSL。另一方面,Rails 与 ActiveRecord 紧密耦合,并期望 DB 连接能够正常工作。但这不是 Rails 问题,因此也不是 Sinatra 问题。
  • 检查README,它很好地覆盖了DSL。了解代码的哪些部分做什么非常重要,尤其是在 SO 上询问该代码时。

标签: ruby activerecord sinatra database-schema


【解决方案1】:

使用 Sinatra 手动配置数据库很容易。我们喜欢在 MySQL 中构建表,而不是使用 ActiveRecord 迁移。

您必须手动创建数据库模型,而不是使用生成器,并且您将添加此行来管理您的连接:

ActiveRecord::Base.establish_connection(database_settings)

这非常简单。我们通常从 YAML 文件中读取设置。当您想编写自动化测试时,它会变得复杂。这是我写的关于 how to set up automated tests with Sinatra, MiniTest, and ActiveRecord 的博客。

【讨论】:

  • 您不是设置 Sinatra 来执行此操作,而是设置 ActiveRecord 执行此操作。 Sinatra 只是一个用于处理 URL 的 DSL。
【解决方案2】:

由于您仍在使用活动记录,您只需将下一行添加到您的配置中(我将其放在config/initializers/active_record.rb 下)。

ActiveRecord::Base.schema_format = :sql

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多