2015-09-01 37 views
0

我在開發中的rails應用程序中包含sqlite3數據庫。在早期開發中,應用程序中沒有任何表具有已編制索引的字段(除了始終編入索引的ID),並且在部署到Heroku時,應用程序已找到。Heroku - 沒有記錄的索引表失敗

然後,我改變了三個表,使得每個表都有一個字段(除了被索引的ID)被索引爲唯一的,而且我還有一個沒有索引字段的表的字段不是ID。即使表中沒有記錄,應用程序也能正常工作,但是當應用程序通過postgres推送到Heroku時,應用程序在每個索引表上都失敗,但不在未索引的表上。
應用程序加載時沒有錯誤消息,並且在運行「heroku run rake db:migrate」時沒有錯誤。

日誌中的錯誤消息是「PG :: UndefinedTable:ERROR:relation」[tablename]「不存在」,看起來像表不在那裏。有沒有人有任何想法,我怎麼可以去找到問題或修復它?

我已經試過在本地完全刪除和重建數據庫,並且幾次刪除Heroku上的應用程序和數據庫並重新部署,都無濟於事。

我真的很聰明!任何幫助將感激地收到!

請多關照,

+0

您是否修改了已經在Heroku上執行的遷移? –

+0

是的 - 我修改了cloud9上的遷移,刪除了Heroku上的應用程序和數據庫,創建了一個新的git,並再次部署和遷移了應用程序/數據庫。 – user3331154

+0

使用命令「Heroku pg:psql」我決定嘗試創建其中一個表。查看命令和響應。我覺得有些東西和我一樣困惑......輸入第一條命令:「CREATE TABLE」Breeds「(」id「INTEGER PRIMARY KEY NOT NULL,」breedName「varchar NOT NULL)」Heroku Response:「ERROR:relation」Breeds 「 已經存在」。第二個命令輸入「SELECT * FROM Breeds;」 Heroku響應:錯誤:關係「品種」不存在「 – user3331154

回答

0

你混合你的報價,不帶引號的標識符的使用,這可能是在生產發展和PostreSQL使用MySQL的副作用。

由於docs狀態...

Quoting an identifier also makes it case-sensitive, whereas unquoted names are always folded to lower case. For example, the identifiers FOO, foo, and "foo" are considered the same by PostgreSQL, but "Foo" and "FOO" are different from these three and each other. (The folding of unquoted names to lower case in PostgreSQL is incompatible with the SQL standard, which says that unquoted names should be folded to upper case. Thus, foo should be equivalent to "FOO" not "foo" according to the standard. If you want to write portable applications you are advised to always quote a particular name or never quote it.)

甲骨文同樣的行爲,以及使用帶引號的標識符的一般不提倡,因爲它可以導致剛剛此類問題。

+0

謝謝大衛。我用名稱的大寫第一個字母重新創建了表格,並且以前使用小寫的第一個字母生成了CRUD實用程序。 ,但是PostgreSQL的確如此,我用小寫重新創建了表格,非常感謝 – user3331154

+0

我建議你不再使用混合大小寫表名,並且在開發和生產中都使用PostgreSQL –

+0

謝謝 - 很好的建議 – user3331154