3 Stimmen

Heroku Push Problem Teil 2 - Postgresql - PGError Relations existiert nicht - Ruby on Rails

Ok, ich habe mein letztes Problem mit dem Unterschied zwischen Postgresql und SQLite überwunden und es scheint, dass Heroku mir sagt, dass ich ein weiteres Problem habe. Ich bin neu in Ruby und Rails, so dass eine Menge von diesem Zeug, das ich nicht auf den ersten entziffern kann. Auf der Suche nach ein wenig Richtung hier. Die Fehlermeldung und PostsController Index sind unten. Ich überprüfte meine routes.rb-Datei und alles scheint gut, aber ich könnte etwas übersehen werden. Ich werde posten, wenn Sie benötigen.

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#index

  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

0voto

soychicka Punkte 68

Ich habe gerade die Ursache für dieses Problem in meiner Rails-App entdeckt, dank Bill Karwins obigem Tipp:

Wenn ich mein Datenbankschema aktualisiere, indem ich rake db:schema:dump auf meiner Dev-Box ausführe, werden einige (aber nicht alle) Symbole durch enquoted strings ersetzt...

z.B.,

add_index :taggings, ["vectors"] 

wird

add_index "taggings", ["vectors"] 

Dies verursacht keine Probleme auf meiner Dev-Box, aber Heroku scheint nicht die Diskrepanz gut zu behandeln, wenn die Datenbank von Grund auf neu erstellt wird, aber nicht auf eine db:push.

Sobald ich die Symbole für die Tabellennamen manuell ausgetauscht hatte, funktionierte meine Anwendung wieder einwandfrei.

Wenn jemand den Grund dafür aus dem Stegreif kennt, würde mich das interessieren...

0voto

Sam Punkte 1

Ich habe das gleiche Problem. Ich wette, Ihr Tabellenname muss "tag" und nicht "tags" lauten.

Wenn Sie den Tabellennamen in Postgresql in 'tags' ändern, wird es funktionieren. Aber warum? Ich habe den Modellnamen im Singular angegeben, GHOST nimmt den Plural.

0voto

Sam Punkte 1

So fügen Sie die folgende Zeile in Ihr /config/environment.rb :

ActiveRecord::Base.pluralize_table_names = false

0voto

ranska Punkte 11

Gleiches Problem bei mir, aber nur in der Test- und Prod-Umgebung.

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

0voto

Dreyfuzz Punkte 486

Ich hatte das gleiche Problem nach einem großen Push, obwohl ich daran gedacht hatte, Migrationen durchzuführen. Für mich bestand die Lösung darin, neu zu starten:

heroku restart

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X