奇数耙 db:migrate 输出
Odd rake db:migrate output
为什么 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
跟踪显示:
** 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 后启动的。
为什么会这样?
升级到 Rails 4.2.1 后,我遇到了同样的问题,阻止我通过 Codeship 进行迁移部署,它期望来自 rake db:migrate
的非常特殊的输出认为推送成功。
在 config/environments/production.rb
中设置 config.log_level = :info
解决了我的问题,大概是因为 :debug
级别的日志级别太冗长了。
我得到这个奇怪的神秘 SQL' 输出的原因是因为我的 gem 文件中有 Heroku 的 rails_12factor gem 而不是分组到 :production .
解决方案是:
group :production do
gem 'rails_12factor'
end
和运行bundle
This discussion 为我解决了 "odd" 输出:
只需在您的环境配置中将 dump_schema_after_migration
设置为 false
,如下所示:
/config/environments/development.rb
Application.configure do
...
dump_schema_after_migration = false
...
end
编辑
在大多数情况下,这不是您想要做的,因为您需要在版本控制中包含 schema.rb
。
为什么 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
跟踪显示:
** 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 后启动的。
为什么会这样?
升级到 Rails 4.2.1 后,我遇到了同样的问题,阻止我通过 Codeship 进行迁移部署,它期望来自 rake db:migrate
的非常特殊的输出认为推送成功。
在 config/environments/production.rb
中设置 config.log_level = :info
解决了我的问题,大概是因为 :debug
级别的日志级别太冗长了。
我得到这个奇怪的神秘 SQL' 输出的原因是因为我的 gem 文件中有 Heroku 的 rails_12factor gem 而不是分组到 :production .
解决方案是:
group :production do
gem 'rails_12factor'
end
和运行bundle
This discussion 为我解决了 "odd" 输出:
只需在您的环境配置中将 dump_schema_after_migration
设置为 false
,如下所示:
/config/environments/development.rb
Application.configure do
...
dump_schema_after_migration = false
...
end
编辑
在大多数情况下,这不是您想要做的,因为您需要在版本控制中包含 schema.rb
。