Ruby 如何将Sinatra配置为使用structure.sql而不是schema.rb?
我有一个Sinatra应用程序,我正在使用ActiveRecord设置一个数据库 由于该数据库的一个怪癖(即字符串主键),我想使用SQL模式(Ruby 如何将Sinatra配置为使用structure.sql而不是schema.rb?,ruby,activerecord,sinatra,database-schema,Ruby,Activerecord,Sinatra,Database Schema,我有一个Sinatra应用程序,我正在使用ActiveRecord设置一个数据库 由于该数据库的一个怪癖(即字符串主键),我想使用SQL模式(structure.SQL)而不是Ruby模式(schema.rb)。我不介意这限制了我使用特定的数据库风格,不管怎样,我们都使用Postgres 为了在Rails中实现这一点,我将把config.active\u record.schema\u format=:sql放在config/application.rb中。如何在Sinatra中执行相同的操作?
structure.SQL
)而不是Ruby模式(schema.rb
)。我不介意这限制了我使用特定的数据库风格,不管怎样,我们都使用Postgres
为了在Rails中实现这一点,我将把
config.active\u record.schema\u format=:sql
放在config/application.rb
中。如何在Sinatra中执行相同的操作?使用Sinatra手动配置数据库很容易。我们喜欢在MySQL中构建表,而不是使用ActiveRecord迁移
您必须手动创建数据库模型,而不是使用生成器,并且您将添加此行来管理连接:
ActiveRecord::Base.establish_connection(database_settings)
这非常简单。我们通常从YAML文件中读取设置。当您想要编写自动化测试时,它会变得复杂。这是我写的一个博客。使用Sinatra手动配置数据库很容易。我们喜欢在MySQL中构建表,而不是使用ActiveRecord迁移 您必须手动创建数据库模型,而不是使用生成器,并且您将添加此行来管理连接:
ActiveRecord::Base.establish_connection(database_settings)
这非常简单。我们通常从YAML文件中读取设置。当您想要编写自动化测试时,它会变得复杂。这是我写的一个博客。由于您仍在使用active record,您只需将下一行添加到配置中(我将其放在
config/initializers/active_record.rb
下)
由于您仍在使用active record,所以只需将下一行添加到配置中(我将其放在
config/initializers/active_record.rb
下)
这不是Sinatra的问题,而是ActiveRecord的问题。西纳特拉只是一个无辜的旁观者。你可能想看看如何使用帕德里诺。它位于Sinatra的顶部,但提供了许多类似发电机和助手的轨道。Sinatra非常棒,可以与DBM一起工作,但最终你会编写更多的代码。这是一个Sinatra问题,因为虽然在Rails框架中很容易找到如何实现这一点(如上所述),但这并不适用于Sinatra——或者,如果适用,则需要大量的手动设置。不,Sinatra与DBMs完全没有关系。您必须结合您选择的数据库连接。通常,我们使用Sequel或DataMapper来实现这一点,不过ActiveRecord也可以做到。不过,西纳特拉并不知道数据库,只有其他的宝石知道。在Sinatra中没有任何方法会关心,只有底层的Ruby语言。Sinatra是专门用于创建URL处理程序的DSL。另一方面,Rails与ActiveRecord紧密耦合,并期望DB连接正常工作。但这不是Rails的问题,因此也不是Sinatra的问题。请检查,它很好地涵盖了DSL。了解代码的哪些部分做了什么非常重要,特别是在询问代码时。这不是Sinatra的问题,而是ActiveRecord的问题。西纳特拉只是一个无辜的旁观者。你可能想看看如何使用帕德里诺。它位于Sinatra的顶部,但提供了许多类似发电机和助手的轨道。Sinatra非常棒,可以与DBM一起工作,但最终你会编写更多的代码。这是一个Sinatra问题,因为虽然在Rails框架中很容易找到如何实现这一点(如上所述),但这并不适用于Sinatra——或者,如果适用,则需要大量的手动设置。不,Sinatra与DBMs完全没有关系。您必须结合您选择的数据库连接。通常,我们使用Sequel或DataMapper来实现这一点,不过ActiveRecord也可以做到。不过,西纳特拉并不知道数据库,只有其他的宝石知道。在Sinatra中没有任何方法会关心,只有底层的Ruby语言。Sinatra是专门用于创建URL处理程序的DSL。另一方面,Rails与ActiveRecord紧密耦合,并期望DB连接正常工作。但这不是Rails的问题,因此也不是Sinatra的问题。请检查,它很好地涵盖了DSL。了解代码的哪些部分做了什么非常重要,特别是在询问代码时。你不是在设置Sinatra来做这件事,而是在设置ActiveRecord来做这件事。Sinatra只是一个用于处理URL的DSL。你不是在设置Sinatra来处理URL,而是在设置ActiveRecord来处理URL。Sinatra只是用于处理URL的DSL。