2011-12-05 106 views
9

我試圖把一個簡單的應用程序最多的Heroku和運行:PGError:ERROR:關係 「表格名」 不存在

heroku rake db:migrate 

,但我得到了以下錯誤:

rake aborted! 
PGError: ERROR: relation "posts" 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 = '"posts"'::regclass 
       AND a.attnum > 0 AND NOT a.attisdropped 
      ORDER BY a.attnum 

Tasks: TOP => db:migrate => environment 
(See full trace by running task with --trace) 

我遷移是這樣的:

class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
     t.string :source 
     t.string :tweetid 
     t.string :pure 
     t.string :media 
     t.string :destination 
     t.datetime :time 
     t.timestamps 
    end 
    end 
end 

而且,參照其他的SO回答後,我已經列入我的Gemfile如下:

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.1.4' 
    gem 'coffee-rails', '~> 3.1.1' 
    gem 'uglifier', '>= 1.0.3' 
    gem 'pg' 
end 

預先感謝您的幫助!

--- UPDATE ---

主要的原因我感到困惑的是,當我運行在Heroku遷移這一切本地工作,只是沒有。

以下是錯誤我現在得到:

rake aborted! 
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.) 

我一直在尋找這樣一個問題:

Heroku error when launch rails3.1 app missing postgres gem

我幾乎確信我的database.yml的不應該是這樣的(看到我需要運行postgresql !!!):

# SQLite version 3.x 
# gem install sqlite3 
# 
# Ensure the SQLite 3 gem is defined in your Gemfile 
# gem 'sqlite3' 
development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
    adapter: sqlite3 
    database: db/production.sqlite3 
    pool: 5 
    timeout: 5000 

S對這裏的庸俗性非常道歉。提前謝謝你的幫助!

也試過此鏈接:Uploading to Heroku DB rake:migrate problem

+0

寶石'pg'應該在組之外:資產塊,它與我想的沒有任何關係。你嘗試過'heroku rake db:setup'嗎? – Robin

+0

你不需要pg在你的gemfile文件中爲heroku – fivetwentysix

+0

對不起,這是一個早期的實驗,看看複數是否影響它。 –

回答

11

我只是跑:bundle exec rake db:migrate而且如果你使用ActiveAdmin,取表PG表示不存在,註釋掉ActiveAdmin RB文件的內容合作

+0

這對我不起作用 – huertanix

15
create_table :posts 

你沒忘了s?表名應該是複數。

+2

+1他可能已經很累了(: – ComputerSaysNo

1

羅賓可能有正確的,但爲了以防萬一......

檢查文件名/對您的遷移時間戳。這些按順序運行。我遇到了一個問題,那就是使我的遷移工作的發生器首先將外表放入...我切換了文件名並且它工作正常。

這是一個長鏡頭,但我想我會把它放在那裏。

4

我有一個類似的問題,但它不是由遷移或Gemfile造成的。我有4個模型設置爲多態關係。卸下聲明

belongs_to :assetable, :polymorphic => true, :dependent => :destroy 

和刪除子類acts_as_*聲明就足以使db:migrate成功完成。然後,我在模型中添加了這些語句,並且一切都很順利。我不確定爲什麼會出現這種情況,但是如果您遇到類似的情況,這可能會暫時有所幫助,直到找到更好的解決方案。

我的情況是使用http://mediumexposure.com/multiple-table-inheritance-active-record/作爲基準的父代和3個對象之間的多態多表繼承方案。

+0

我猜想與多態關聯相關的東西是在模型類創建之前嘗試加載模型類,問題中的SQL是AR用來計算表的ActiveAdmin有時是這種情況下的罪魁禍首 –

+0

有趣的是,我使用的是ActiveAdmin,到目前爲止,我還沒有意識到ActiveAdmin可能在這方面發揮了作用,尤其是在db:migration。 – mobilemonkey

+0

我是很確定ActiveAdmin會嘗試在應用程序初始化程序中預加載一些內容,並且在db:migrate之前發生初始化我不知道ActiveAdmin的某些部分或模型關聯會觸發問題,但是人們通過暫時禁用ActiveAdmin來解決類似問題 –

0

就我而言,在我的遷移中,我已經在執行rename_table,因爲我已經修改了模型名稱以反映新的表名。我已將User轉換爲User::User。需要users表重命名爲user_users,所以我的移民看起來像

class RenameUsersTableWithPrefix < ActiveRecord::Migration 
    def up 
    rename_table :users, :user_users 
    end 

    def down 
    rename_table :user_users, :users 
    end 
end 

而不是

app/models/user.rb 

我現在有

app/models/user.rb 
app/models/user/user.rb 

與包含User::User模型後,和前者僅包含

module User 
    def self.table_name_prefix 
    "user_" 
    end 
end 

這是在新增加的User模塊中的這一類方法,它在運行rake db:migrate時給我PGError,就像OP一樣。在運行我的遷移時臨時刪除此類方法,可以使遷移順利進行。

3

例如,對於這種情況下PGError: ERROR: relation "posts" does not exist,註釋掉全部內容app/admin/posts.rb,然後取消註釋你做你的遷移之後。

+0

謝謝,這是我的 –

+0

這不適合我。此外,您可以評論模型文件的哪些部分? – huertanix

-1

我遇到了同樣的問題。我跑了heroku run rake db:migrate並解決了這個問題。

+0

這不適合我。 – huertanix