你如何使rake db:schema:dump具有schema.rb中字段的字符集和排序规则?

时间:2015-11-25 15:15:43

标签: ruby-on-rails database ruby-on-rails-4

我们的某个字段需要区分大小写。我们可以编写一个迁移来更改正常工作的排序规则,但这种更改不会反映在schema.rb中。它会产生问题,例如在运行测试时,克隆的测试数据库将没有我们想要的那个字段的排序规则。

我们使用mysql。

我已经找到了一种方法来实现这一目标而没有结果..

我设法在github上找到了这个,但不确定这是如何实现的https://github.com/cantino/huginn/blob/db792cdd82eb782e98d934995964809d9e8cb77d/db/schema.rb

2 个答案:

答案 0 :(得分:3)

我认为没有“官方”方式(由Rails或ActiveRecord gems提供)来实现这种转储。遵循git历史记录,在Huginn repo本身上,您可以找到实现此转储所需的代码。看看这个提交:https://github.com/cantino/huginn/commit/db792cdd82eb782e98d934995964809d9e8cb77d

目前最相关的代码是:https://github.com/cantino/huginn/blob/master/lib/ar_mysql_column_charset/main.rb

因此,如果您需要此功能,则可能需要将此扩展程序复制/粘贴到项目中。

<强>更新

我对Huginn repo(git历史记录和问题)进行了更深入的审核,正如您在此comment中所读到的那样,此功能被提取到gem:https://github.com/kamipo/activerecord-mysql-awesome中。

答案 1 :(得分:1)

如@ house9的评论中所述,您可以使用structure.sql。将其添加到项目的application.rb:

config.active_record.schema_format = :sql

然后运行bundle exec rake db:structure:dump以生成实际的SQL结构。这保留了charsets和collat​​ions(理想情况下应该在schema.rb中,但是唉)。

“结构”本质上不如“架构”便携,但对于所有团队成员和环境来说,使用相同的数据库和版本通常都是一件好事。