2010-04-23 48 views
3

好吧,通過Postgresql和SQLite之間的差異來解決最後一個問題,好像Heroku告訴我我有另一個問題。我對Ruby和Rails很陌生,所以我開始無法解讀這些東西。在這裏尋找一個小方向。錯誤消息和PostsController索引如下。我檢查了我的routes.rb文件,並且在那裏似乎都很好,但我可能會錯過一些東西。如果您需要,我會發布。Heroku推問題第2部分 - Postgresql - PGError關係不存在 - Ruby on Rails

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 
+0

你試過「heroku rake db:migrate」嗎? – 2010-08-13 13:25:53

+0

@Comptrol「heroku rake db:migrate」爲我做了詭計。 Cmd行輸出表示該cmd已被棄用,而應該使用「heroku run rake」。那麼這是否意味着每次我通過運行「git push heroku master」後的遷移在本地進行db更改時,我都必須跟進一個「heroku run rake」? – 2013-03-25 18:51:52

回答

0

這個Rails應用程序使用了哪些所有寶石?你在應用程序的根目錄下有一個.gems清單文件,用於自動檢測和安裝?我看到你正在使用分頁寶石。如果你沒有添加寶石到.gems文件,那麼我想這就是麻煩。如果你沒有這樣做,那麼這將是尋求幫助最好的地方:Heroku | Managing Gems

+0

我正在使用will_paginate,回形針,wysihat引擎。他們都在environment.rb文件中有行。是不是heroku看起來自動安裝這個東西的environment.rb文件? – bgadoci 2010-04-24 19:55:54

+0

糟糕! Heroku不會自動從environment.rb文件中檢測到。您的應用程序根目錄中需要一個特殊的.gems清單文件。創建一個,並添加所有的寶石。該程序在上面的鏈接中描述。我想你所有與heroku有關的問題都解決了。 :) – 2010-04-25 02:07:14

+0

以及爲什麼這個問題有關?其他人回答的地址更好! – Mauricio 2010-12-10 14:55:23

1

這看起來很奇怪:

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

單引號分隔字符串文字,所以內雙引號都被視爲字符串的一部分。所以它正在尋找一個名稱實際上包含"字符的表名。

我不確定Rails管道如何生成該查詢,所以我沒有任何建議來解決它。對不起...

但是,這絕對好像是一個Leaky Abstraction的問題。 :-)

+0

這並不是很讓人安慰。不真正瞭解您提供的鏈接中的所有內容。我確定沒有一個表格「,因爲我甚至不認爲這是可能的,希望以前有人看到過這個。我對ruby,rails和編程一般都很陌生,所以這對於 – bgadoci 2010-04-24 03:50:34

+1

通常Rails會從你的ActiveRecord類名中推斷出這個表的名字,但是這個名字可以被覆蓋,也許你在某處指定了SQL表名,並且意外地包含了「字符? – 2010-04-24 04:35:44

0

我剛剛發現這個問題的根源在我的Rails應用程序,以上感謝比爾Karwin的提示:

當我通過運行耙分貝更新我的DB模式:架構:甩在我的dev的盒子,它取代了一些(但不是全部)與enquoted串符號...

例如,

add_index :taggings, ["vectors"] 

成爲

add_index "taggings", ["vectors"] 

這並不會導致我的開發盒上出現任何問題,但是當數據庫是從頭開始創建而不是在db:push上時,heroku似乎無法很好地處理差異。

只要我手動切換表名稱符號,我的應用程序開始再次打好。

如果有人知道這個副手的原因,我有興趣......

0

我有同樣的問題。我敢打賭,你的表名必須是'tag',而不是'tags'。

如果您在Postgresql中將表名更改爲'tags',它將起作用。但爲什麼?我給出了單數型號名稱,GHOST取複數。

0

要添加線以下到您/config/environment.rb

ActiveRecord::Base.pluralize_table_names = false 
2

我也陷入了類似「PGError:ERROR:關係」 ......從軌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 
0

同樣的問題對我來說,但只有連接測試和生產線ENV。

rake db:migrate 

確定

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 
1

喜 我發現了一些 所以我problème是:

有些用戶在使用寶石像初始化文件rails_admin是誰? 因爲當我的評論我的行動,我的初始化文件,與此相關的模型我migartion工程:)

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

所以也許(我不是SUR)的初始化是rake任務之前。它要求一個模型,但 不是sql表,所以錯誤。 無論如何這個行動爲我的測試和生產環境:)工作

1

我有同樣的問題,問題是我忘記遷移數據庫使用耙子。下面的一切工作正常:

bundle exec rake db:migrate 
0

即使我記得運行遷移時,我有一個大推後同樣的問題。對我來說,解決方案是重新啓動:

heroku restart