新しい 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
移行が定義されていなくてもこれが発生するため、移行自体に問題があるとは思いません。スタック トレースを見ると、User モデルで定義されたスコープが実行されていることがわかります。それらをコメント アウトすると、移行は問題なく実行されます。
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))
これはレールのバグですか、それとも何か間違っていますか? アプリ全体でこれらのスコープの使用を削除することはできますが、これは避けたいことです。
これらのスコープを、レールがコンソールにロードされたとき、またはサーバーとしてロードされたときに呼び出されるが、移行中には呼び出されない何らかの条件内に配置する必要がありますか?
どうもありがとう、
ダン・ソーター