Проблема Heroku Push часть 2 - Postgresql - PGError Отношения не существует - Ruby on Rails - PullRequest
3 голосов
/ 24 апреля 2010

Хорошо, так что я решил мою последнюю проблему с разницей между Postgresql и SQLite и похоже, что Heroku говорит мне, что у меня есть еще одна. Я новичок в ruby ​​и rails, поэтому многое из этого я не могу понять сначала. Ищете немного направление здесь. Сообщение об ошибке и индекс PostsController находятся ниже. Я проверил свой файл rout.rb, и там все вроде хорошо, но я мог что-то упустить Я отправлю, если вам нужно.

Processing PostsController#index (for 99.7.50.140 at 2010-04-23 15:19:22) [GET]

ActiveRecord::StatementInvalid (PGError: ERROR:  relation "tags" does not exist
:             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 = '"tags"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum
):

PostsController индекс #

  def index
    @tag_counts = Tag.count(:group => :tag_name, 
       :order => 'count_all DESC', :limit => 20)
       conditions, joins = {}, :votes

    @ugtag_counts = Ugtag.count(:group => :ugctag_name, 
       :order => 'count_all DESC', :limit => 20)
       conditions, joins = {}, :votes

    @vote_counts = Vote.count(:group => :post_title, 
          :order => 'count_all DESC', :limit => 20)
          conditions, joins = {}, :votes


       unless(params[:tag_name] || "").empty?
         conditions = ["tags.tag_name = ? ", params[:tag_name]]
         joins = [:tags, :votes]
       end
       @posts=Post.paginate(
                 :select => "posts.*, count(*) as vote_total", 
                 :joins => joins, 
                 :conditions=> conditions, 
                 :group => "votes.post_id, posts.id ", 
                 :order => "created_at DESC",
                 :page => params[:page], :per_page => 5)
        @popular_posts=Post.paginate(
                 :select => "posts.*, count(*) as vote_total", 
                 :joins => joins, 
                 :conditions=> conditions, 
                 :group => "votes.post_id, posts.id", 
                 :order => "vote_total DESC",
                 :page => params[:page], :per_page => 3)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
      format.json { render :json => @posts }
      format.atom
    end
  end

Ответы [ 10 ]

2 голосов
/ 04 апреля 2011

Я столкнулся с подобной проблемой "PGError: ERROR: отношение" ... "не существует" при обновлении с rails 3.0.3 до rails 3.0.5 - похоже, что алгоритм плюрализации имени базы данных изменился , То, что я имел обыкновение использовать для множественного числа: «project_metadatas» теперь называется «project_metadata».

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

class MetadataName < ActiveRecord::Migration
  def self.up
    rename_table :project_metadatas, :project_metadata
  end

  def self.down
    rename_table :project_metadata, :project_metadatas
  end
end
1 голос
/ 12 июля 2012

У меня была та же проблема, проблема была в том, что я забыл перенести базу данных с помощью rake. Следующие получили все работает правильно:

bundle exec rake db:migrate
1 голос
/ 15 апреля 2011

привет я нашел что-то так что моя проблема была:

 `enter code here`WHERE a.attrelid = '"posts"'::regclass

некоторые из вас используют gem как rails_admin с файлом инициализатора? потому что, когда я комментирую свои действия в файле инициализатора, относящемся к этой модели, моя миграция работает:)

 #config.model Post do
 #  field :body, :text do
 #    ckeditor true
 #  end
 #end

Так что возможно (я не сюр) инициализатор перед граблями и. Это попросить модель, но есть это не таблица SQL, так что ошибка. в любом случае это действие работает для моей тестовой и производственной среды :)

1 голос
/ 24 апреля 2010

Это выглядит странно:

WHERE a.attrelid = '"tags"'::regclass

Одинарные кавычки отделяют строковый литерал, поэтому внутренние двойные кавычки рассматриваются как часть строки. Поэтому он ищет имя таблицы, которое на самом деле имеет " символов в качестве части имени.

Я не уверен, как сантехника Rails сгенерировала этот запрос, поэтому мне нечего предложить, чтобы это исправить. К сожалению ...

Но, похоже, это проблема Leaky Abstraction . : -)

0 голосов
/ 05 декабря 2014

У меня была такая же проблема после большого толчка, хотя я и запомнил запуск миграций. Для меня решение было перезагрузить:

heroku restart
0 голосов
/ 14 апреля 2011

Та же проблема для меня, но только en test и prod env.

rake db:migrate 

OK

rake db:migrate RAILS_ENV=test
rake aborted!
PGError: ERREUR:  la relation « posts » n'existe pas
LINE 4:              WHERE a.attrelid = '"posts"'::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 = '"posts"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum
0 голосов
/ 05 июня 2010

Чтобы добавить строку ниже к вашему /config/environment.rb:

ActiveRecord::Base.pluralize_table_names = false
0 голосов
/ 29 мая 2010

У меня такая же проблема. Бьюсь об заклад, имя вашей таблицы должно быть «тег», а не «теги».

Если вы измените имя таблицы на «теги» в Postgresql, оно будет работать. Но почему? Я дал единственное название модели, GHOST принимает множественное число.

0 голосов
/ 22 мая 2010

Я только что обнаружил источник этой проблемы в своем приложении rails, благодаря подсказке Билла Карвина выше:

Когда я обновляю свою схему БД, запустив rake db: schema: dump на моем устройстве dev, она заменяет некоторые (но не все) символы на строки в кавычках ...

например,

add_index :taggings, ["vectors"] 

становится

add_index "taggings", ["vectors"] 

Это не вызывает никаких проблем на моем устройстве для разработки, но heroku, похоже, плохо справляется с расхождением, когда БД создается с нуля, но не на db: push.

Как только я вручную переключил символы имен таблиц, мое приложение снова начало играть хорошо.

Если кто-нибудь знает причину этого неискреннего, мне было бы интересно ...

0 голосов
/ 24 апреля 2010

Какие все драгоценные камни используются этим приложением Rails? У вас есть файл манифеста .gems в корне приложения для heroku для автоматического обнаружения и установки? Я вижу, что вы используете, будет разбивать драгоценные камни. Если вы не добавили драгоценные камни в файл .gems, тогда я думаю, в этом проблема. Если вы еще этого не сделали, тогда вам лучше всего обратиться за помощью: Heroku | Управление драгоценными камнями

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