【发布时间】:2012-05-23 23:31:50
【问题描述】:
我在新的 Rails 应用程序 (3.2.3) 中运行迁移时遇到了问题。我们正在使用 postrgres 9.1.3 和 - pg (0.13.2) -
当我运行 rake db:create,然后 rake db:migrate,我得到 ->
1.9.3-p194 (master) rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
PG::Error: ERROR: relation "roles" does not exist
LINE 4: WHERE a.attrelid = '"roles"'::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 = '"roles"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
即使没有定义任何迁移,我也会得到这个,所以我不认为这是迁移本身的问题。当我查看堆栈跟踪时,我看到在我的用户模型中定义的范围正在运行 - 当我将它们注释掉时,迁移运行没有问题。
scope :team_leaders, where(role_id: Role.where(name: 'Team Leader').first.try(:id))
scope :area_leaders, where(role_id: Role.where(name: 'Area Leader').first.try(:id))
scope :nation_leaders, where(role_id: Role.where(name: 'Nation Leader').first.try(:id))
scope :employees, where(role_id: Role.where(name: 'Employee').first.try(:id))
这是 Rails 中的错误,还是我做错了什么?非常感谢一些帮助 - 我们可以在整个应用程序中删除这些范围的使用,但这是我们想要避免的。
我是否应该将这些范围放在某种条件中,当 Rails 加载到控制台或作为服务器时调用,而不是在迁移期间调用?
非常感谢,
丹·索特
【问题讨论】:
-
看起来角色表不是在 db:create 中创建的。角色有迁移吗?您使用的是 acl9 或 role_requirement 之类的角色插件吗?如果是这样,请确保您没有遗漏需要运行的生成器。
-
您可能还想尝试将导致您出现问题的范围包装在 lamda 中,以便在实际使用它们之前不会对其进行评估。
标签: ruby-on-rails ruby postgresql ruby-on-rails-3.2