【问题标题】:Odd rake db:migrate output奇数 rake db:migrate 输出
【发布时间】:2015-03-10 03:44:53
【问题描述】:

为什么rake db:migrate 运行Execute db:schema:dump 我的输出都搞砸了(显示SQL)。

看起来像这样:

  ActiveRecord::SchemaMigration Load (0.5ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (3.7ms)  SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
FROM pg_constraint c
JOIN pg_class t1 ON c.conrelid = t1.oid
JOIN pg_class t2 ON c.confrelid = t2.oid
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
JOIN pg_namespace t3 ON c.connamespace = t3.oid
WHERE c.contype = 'f'
  AND t1.relname = 'accounts'
  AND t3.nspname = ANY (current_schemas(false))
ORDER BY c.conname

   (3.2ms)  SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
FROM pg_constraint c
JOIN pg_class t1 ON c.conrelid = t1.oid
JOIN pg_class t2 ON c.confrelid = t2.oid
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
JOIN pg_namespace t3 ON c.connamespace = t3.oid
WHERE c.contype = 'f'
  AND t1.relname = 'deliveries'
  AND t3.nspname = ANY (current_schemas(false))
ORDER BY c.conname

   (3.2ms)  SELECT t2.oid::regclass::text AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
FROM pg_constraint c
JOIN pg_class t1 ON c.conrelid = t1.oid
JOIN pg_class t2 ON c.confrelid = t2.oid
JOIN pg_attribute a1 ON a1.attnum = c.conkey[1] AND a1.attrelid = t1.oid
JOIN pg_attribute a2 ON a2.attnum = c.confkey[1] AND a2.attrelid = t2.oid
JOIN pg_namespace t3 ON c.connamespace = t3.oid
WHERE c.contype = 'f'
  AND t1.relname = 'posts'
  AND t3.nspname = ANY (current_schemas(false))
ORDER BY c.conname

Trace 显示:

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump

这是在将 rails 4.1.6 升级到 rails 4.2.0 之后开始的。

为什么会这样?

【问题讨论】:

  • 到底是什么问题?模式转储程序更新 schema.rb 并且所有那些看起来很时髦的查询都用于找出表结构。
  • @mu 每次我运行 rake db:migrate 时都会发生这种情况......如果迁移是最新的,我预计不会发生任何事情。我不明白为什么我看到这个输出......
  • 它总是以'first_time'运行
  • @muistooshort 你知道是什么导致它像这样转储架构吗?
  • 不是我的头顶。我使用structure.sql,因为我的数据库中有各种ActiveRecord 无法理解的东西。为什么这是个问题? “我的输出都搞砸了”是什么意思?

标签: ruby-on-rails ruby rake rails-activerecord


【解决方案1】:

我得到这个奇怪的神秘 SQL'ish 输出的原因是因为我的 gemfile 中有 Heroku 的 rails_12factor gem 并且没有分组到 :production。

解决办法是:

group :production do
  gem 'rails_12factor'
end

然后运行bundle

【讨论】:

    【解决方案2】:

    升级到 Rails 4.2.1 后我遇到了同样的问题,阻止了我通过 Codeship 进行迁移部署,它期望来自 rake db:migrate 的非常特殊的输出认为推送成功。

    config/environments/production.rb 中设置config.log_level = :info 为我解决了这个问题,大概是因为:debug 级别的日志级别过于冗长。

    【讨论】:

      【解决方案3】:

      This discussion 为我解决了“奇怪”的输出:
      只需在您的环境配置中将dump_schema_after_migration 设置为false,如下所示:

      /config/environments/development.rb

      Application.configure do
        ...
        dump_schema_after_migration = false
        ...
      end
      

      编辑
      在大多数情况下,这不是您想要做的,因为您需要在版本控制中包含 schema.rb

      【讨论】:

        猜你喜欢
        • 2014-07-31
        • 2013-03-02
        • 1970-01-01
        • 2018-10-06
        • 2016-11-19
        • 2018-02-05
        • 2013-03-08
        • 2013-09-21
        相关资源
        最近更新 更多