在升级Postgres和Rails后,我无法让我的迁移重回正轨

时间:2012-01-29 18:30:59

标签: ruby-on-rails-3 postgresql rails-migrations

我使用Rails 3.1和Postgres 9.0进行了工作设置,只是将Rails升级到3.2.1和Postgres 9.1.2。

升级postgres意味着迁移数据,因为2个版本的数据存储不兼容。我并不关心迁移本地数据库中的数据,因为它们都用于开发目的。所以我正在尝试使用Rails迁移(或w / schema)重新创建我的数据库。但无论我尝试什么,我都无法进行迁移。

使用

rake db:migrate

rake db:reset

使用我的Postgres 9.1.2设置运行此功能可以让我:

spif: > rake db:migrate
rake aborted!
PG::Error: ERROR:  relation "users" does not exist
LINE 4:              WHERE a.attrelid = '"users"'::regclass
                                        ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
               FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"users"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

起初我虽然可能是pg gem不支持Rails 3.2.1但是也尝试使用sqlite3但是这给了我找不到相同的用户:

spif: > rake db:reset
rake aborted!
Could not find table 'users'

所以看起来Rails需要一个用户表。

  1. 我不知道如何找出实际调用此代码的代码。当我使用--trace运行迁移命令时,它显示的是ActiveRecord内部执行它。这可能是ActiveRecord 3.2.1中的错误(我将如何找到它?)。

  2. 我可以使用psql和config / database.yml中的用户设置连接到pg db。 rails是否期望一些可以查询用户的postgres表?

  3. 我已经完全删除了我的db / migrate目录和db / schema.rb,以确保那里没有一些奇怪的内部依赖,但也无济于事。

  4. 我确定我错过了一些简单的概念 - 我没有经常尝试从头开始重置我的数据库,所以我希望有一个简单的解释。

    谢谢,非常感谢。

2 个答案:

答案 0 :(得分:1)

我通过手动创建此项目中的用户表和每个其他表解决了这个。然后再次运行迁移,一切正常。只有几张桌子,所以它不是太麻烦,但不是我试图找到的“修复”。

看起来'mu太短'是正确的,这与ActiveAdmin及其在任何数据库操作期间加载环境时的加载方式有关(或者也就是rails服务器/控制台)。

感谢指针mu。

答案 1 :(得分:0)

您是否在初始化程序中使用任何模型加载? 我有同样的问题,我在初始化器中加载模型,所以错误来了,因为在进行迁移之前表不存在,我试图加载一些不存在的东西!