2012-01-09 7 views
7

Я добавил таблицу в свой локальный env под названием schools, и он отлично работает в dev. На самом деле он даже отлично работает в постановке (героику), но не успевает в производстве, а rake db:migrate выдает ошибку ниже.Отсутствие производства/heroku: WHERE a.attrelid = '"school"' :: regclass

Я не могу даже предварительно скомпоновать assest (с RAILS_ENV = production), получить доступ к любой части моего приложения, включая консоль рельсов в производстве (heroku). Все бросает ошибку ниже. Я потерял несколько часов на этом, но не чувствую себя ближе, чтобы понять это. (Примечание: у меня есть '"..."' по ссылке на имя_таблицы, которое, я думаю, является частью проблемы)

Я перешел с рельсов 3.1.0 в 3.1.3, чтобы это могло иметь какое-то отношение к нему.

PGError: ERROR: relation "schools" does not exist 

LINE 4:    WHERE a.attrelid = '"schools"'::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 = '"schools"'::regclass 
       AND a.attnum > 0 AND NOT a.attisdropped 
      ORDER BY a.attnum 

Я как потерянный, как может быть на этом. Я читал еще несколько вопросов по этой теме, но никакого решения не было видно. Спасибо за помощь. Любое понимание очень ценится.

ОБНОВЛЕНИЕ ------------------------------------------- -----------

Я только что создал совершенно новое приложение на heroku и побежал rake db:migrate и получил ту же ошибку.

UPDATE 2

Я клонировали приложение от Heroku и "школ" находится в схеме.

create_table "schools", :force => true do |t| 
    ... 
    ... 
end 

UPDATE 3

Пробовал возвращаясь назад к рельсам 3.1.0, но это не помогло.

ОБНОВЛЕНИЕ 4

Работает над этим. Еще не слышал от геройку поддержки.

UPDATE 5

поддержка Heroku был в состоянии проверить, что «школы» не является таблицей в БД, но я до сих пор не может получить доступ к консоли и приложение по-прежнему вниз.

+0

ли вы запустить миграцию в производстве, чтобы создать 'schools' таблицу? Этот запрос выглядит как ActiveRecord, пытающийся выяснить структуру «школ» для модели «School». –

+0

спасибо за отзыв mu слишком короткий. Я выполнил миграцию, но это дает мне эту ошибку. Как ни странно, миграция, похоже, завершилась должным образом, когда я клонировал приложение из производства, а «школы» находятся в схеме. – Yuri

+0

А вот таблица 'school' в базе данных? Что произойдет, если вы попытаетесь вытащить копию своей производственной базы данных? Он содержит таблицу «школ»? –

ответ

4

Поддержка Heroku помогла мне решить эту проблему, хотя это не было связано с проблемой, связанной с платформой героики, как мы выяснили.

У меня была проблема с курицей и яйцом, где миграция не запускалась, потому что бутстрап рельсов пытался поговорить со столом, а таблица не была создана, потому что миграция не могла выполняться. ActiveAdmin инициализировался при загрузке рельсов и пытался найти школы. Спасибо всем, кто помог.

+2

+1 для сообщения о решении. –

+5

Спасибо за упоминание ** ActiveAdmin **. 'rake db: reset RAILS_ENV = test' возвращает тот же PGError, о котором вы сообщали. Хотя я не смог найти точную причину, я 1. удалил свои инициализаторы/active_admin.rb, 2. Переносил 'app/admin' из проекта и 3. Прокомментировал' ActiveAdmin.routes (self) 'in' config/routes.rb'. 'rake db: reset RAILS_ENV = test', а затем бежал без проблем. Затем я вернул вышеуказанные 3 шага и был в пути. – deefour

1

Нет, цитирование не должно быть проблемой. В то время как двойные кавычки не нужны в данном случае они не правы, либо:

SELECT '"schools"'::regclass 

Я считаю, что PostgreSQL является правильным и отношение schools не делает не существует - в базе данных и в схеме, которая является частью вашего search_path.

Если вы можете подключиться к базе данных, вы можете запустить этот запрос, чтобы диагностировать проблему:

SELECT n.nspname AS schema_name 
     ,c.relname AS table_name 
     ,c.relhastriggers 
     ,c.reltuples 
FROM pg_catalog.pg_class c 
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE c.relname ~~* '%schools%' 
AND c.relkind = 'r' 
AND nspname <> 'pg_catalog'; 

находит каждую таблицу, в которой название содержит строку schools. Подобно psql мета-команды:

\dt *schools* 

Убедитесь, что вы связаны с тем же пользователем в той же базе данных, где у вас есть проблемы.

+0

Благодарим вас за ответ Эрвина. Что бы вы предложили мне сделать? У меня есть миграции 'класса CreateSchools Yuri

+0

Я не могу запустить 'rails console',' heroku run console', все дает мне ошибку выше. Я довольно сильно заблокирован из приложения на производстве. – Yuri

+0

Клонированное приложение. Школа находится в схеме. Я пропустил что-то более очевидное здесь? – Yuri

5

Я решил это, комментируя

#ActiveAdmin.routes(self) 

в маршрутах до перенастройки. После завершения миграции я просто раскомментирую эту строку, и все работает нормально.

+0

Это сработало для меня! –

0

Я столкнулся с этой проблемой при запуске тестов.

Просто сбросить базу данных для test среды:

rake db:reset RAILS_ENV=test 
Смежные вопросы