【问题标题】:db:migrate hangs on simple migrationdb:migrate 挂起简单迁移
【发布时间】:2012-02-17 13:52:30
【问题描述】:

我正在使用 PostgreSQL、Rails 3.1.3 和 Ruby 1.9.3。我正在努力使用db:migrate 概述的here

这是我在终端中看到的:

funkdified@funkdified-laptop:~/railsprojects/hartl$ bundle exec rake db:migrate --trace 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Invoke db:load_config (first_time) 
** Invoke rails_env (first_time) 
** Execute rails_env 
** Execute db:load_config 
** Execute db:migrate 
== AddEmailUniquenessIndex: migrating ======================================== 
-- add_index(:users, :email, {:unique=>true})

然后代码在此时挂起。任何想法为什么?

来自:development.log

[1m[36m (0.1ms)[0m [1mSHOW search_path[0m 
[1m[35m (0.5ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
Migrating to CreateUsers (20120124022843) 
Migrating to AddEmailUniquenessIndex (20120124093922) 
[1m[36m (0.1ms)[0m [1mBEGIN[0m 
[1m[35m (3.6ms)[0m SELECT distinct i.relname, d.indisunique, d.indkey, t.oid 
FROM pg_class t 
INNER JOIN pg_index d ON t.oid = d.indrelid 
INNER JOIN pg_class i ON d.indexrelid = i.oid 
WHERE i.relkind = 'i' 
AND d.indisprimary = 'f' 
AND t.relname = 'users' 
AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = ANY (current_schemas(false)) ) 
ORDER BY i.relname

【问题讨论】:

  • 你能登录一个适当特权的PostgreSQL用户,然后select * from pg_stat_activity
  • 我当然可以。我刚刚通过 pgAdmin III 执行了这个查询: -- 执行查询:select * from pg_stat_activity 总查询运行时间:11 毫秒。检索到 4 行。
  • @derobert,感谢您的回复,但今天早上迁移对我有用。没什么不同 - 相同的迁移文件。也许计算机只需要重新启动?奇怪。
  • 嗯,很高兴它起作用了……它可能在一夜之间启动了 PosgreSQL 的 autovacuum 或 auto-stats 集合。顺便说一句:pg_stat_activity 选择的想法是你会看到迁移正在运行什么查询。当您刚刚粘贴行数时有点失败,没有行...

标签: ruby ruby-on-rails-3 dbmigrate


【解决方案1】:

我刚刚遇到了类似的问题,一个非常简单的迁移无缘无故地停止了。我相信问题与无法获得数据库连接有关。我退出了在另一个终端中打开的 Rails 控制台会话,然后迁移立即完成,没有任何问题。

【讨论】:

  • 我的解决方案也是一样的。我在另一个终端选项卡中关闭了连接,迁移立即结束。
  • 这里也一样。我已经多次遇到这个问题,这是因为我在另一个选项卡中有一个 rails 控制台终端窗口。关闭它,运行迁移并成功完成。
【解决方案2】:

我有同样的问题..我发现有空闲事务阻止了对该表的进一步查询..

运行:

heroku pg:ps --app=...

查看数据库进程。您将不得不终止空闲进程:

heroku pg:kill 913 --force --app=...

(913 是空闲进程的 ID -> 根据需要更改)

【讨论】:

  • 在运行这些东西之前,在 ctrl c'ing 你的 Rails 服务器和任何打开的 Rails 控制台(如果有的话)之后尝试迁移。
猜你喜欢
  • 1970-01-01
  • 2015-06-10
  • 2015-10-31
  • 2012-05-24
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2015-10-28
相关资源
最近更新 更多