加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rake db:schema:dump显示rails 3.2.3和SQL S

发布时间:2020-12-17 02:36:15 所属栏目:百科 来源:网络整理
导读:我正在将应用程序从rails 2.3.8迁移到3.2.3. ‘rake db:schema:dump’在rails 2.3中运行良好 但只生成rails 3.2中没有列名的表名. 即使应用程序通过控制台成功连接,我也必须将config / application.rb更改为include ActiveRecord::Base.table_name_prefix
我正在将应用程序从rails 2.3.8迁移到3.2.3. ‘rake db:schema:dump’在rails 2.3中运行良好
但只生成rails 3.2中没有列名的表名.

即使应用程序通过控制台成功连接,我也必须将config / application.rb更改为include

ActiveRecord::Base.table_name_prefix = 'dbo.'

我是否需要为rake任务做一些不同的事情来获取这些前缀?或者是其他导致丢失列名称问题的东西?

进一步澄清:
我正在寻找rake db:schema:dump,因为站点上的程序员停止使用迁移并开始直接对db进行更改.现在我正在尝试使用迁移重新启动.该过程中建议的第一步是使用模式转储作为起点.此外,(并且我不确定)测试需要从开发db重建测试数据库.

解决方法

简短回答:

db:schema:dump不是正确的选择,但你可以在Rakefile中添加几行代码来获得你想要的结果.

更长的回答:

The scuttlebutt是任务db:schema:dump实际上不应该转储除结构之外的任何内容. (我知道,这是一个用词不当.)这与db:structure:dump类似,除了一个给你一个.rb文件,另一个给你一个.sql文件.

您可以通过将以下代码附加到Rakefile来创建自己的转储rake任务:

对于SQL 2008

task :mydump do
  ActiveRecord::Base.connection.execute(
    "dbcc traceon(2544,-1) n go n dbcc traceon(2546,-1) n go n dbcc stackdump"
  )
end

使用SQL服务器本身来创建转储(这是前面的代码所做的)会限制您,因为转储将始终转到您的日志目录;你不能另行指定.

如果您使用SqlDumper或其他实用程序,您将拥有更多自由.您可以使用系统方法从命令行执行此操作,从rake任务中调用此类实用程序. (请参阅下面的MySQL示例,该示例使用mysqldump实用程序.)

(我没有测试过上面的代码,没有自己安装SQL 2008,但是在this blog上解释了使用SQL Server创建转储的原始SQL代码.)

运行rake任务

然后在命令行上调用rake mydump或rake mydump RAILS_ENV = production.

对于MySQL

您可以使用以下内容为MySQL执行类似的操作:

task :mydump do
    config   = Rails.configuration.database_configuration[Rails.env]
    system "mysqldump -h #{config["host"]} -u #{config["username"]} -p#{config["password"]} #{config["database"]} > db/dump.sql"
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读