我使用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需要一个用户表。
我不知道如何找出实际调用此代码的代码。当我使用--trace运行迁移命令时,它显示的是ActiveRecord内部执行它。这可能是ActiveRecord 3.2.1中的错误(我将如何找到它?)。
我可以使用psql和config / database.yml中的用户设置连接到pg db。 rails是否期望一些可以查询用户的postgres表?
我已经完全删除了我的db / migrate目录和db / schema.rb,以确保那里没有一些奇怪的内部依赖,但也无济于事。
我确定我错过了一些简单的概念 - 我没有经常尝试从头开始重置我的数据库,所以我希望有一个简单的解释。
谢谢,非常感谢。
答案 0 :(得分:1)
我通过手动创建此项目中的用户表和每个其他表解决了这个。然后再次运行迁移,一切正常。只有几张桌子,所以它不是太麻烦,但不是我试图找到的“修复”。
看起来'mu太短'是正确的,这与ActiveAdmin及其在任何数据库操作期间加载环境时的加载方式有关(或者也就是rails服务器/控制台)。
感谢指针mu。
答案 1 :(得分:0)
您是否在初始化程序中使用任何模型加载? 我有同样的问题,我在初始化器中加载模型,所以错误来了,因为在进行迁移之前表不存在,我试图加载一些不存在的东西!