2014-10-30 20 views
0

我有一個在開發和測試中工作正常的Rails應用程序,但是在生產中,它被配置爲使用遠程Postgresql數據庫,但無法創建其表。數據庫已安裝並正在運行。我可以通過psql作爲應用程序連接到它,從生產服務器,使用我在我的database.yml中指定的相同配置,然後我可以使用命令創建和查詢表,沒問題。PG :: UndefinedTable - 下一步故障排除步驟?

當我執行數據庫相關的rake任務,一切都看起來很不錯:

$ rake db:reset 
-- create_table("users", {:force=>true}) 
    -> 0.0293s 
-- add_index("users", ["username"], {:name=>"index_users_on_username", :unique=>true}) 
    -> 0.0428s 
-- initialize_schema_migrations_table() 
    -> 0.0212s 
-- create_table("users", {:force=>true}) 
    -> 0.0097s 
-- add_index("users", ["username"], {:name=>"index_users_on_username", :unique=>true}) 
    -> 0.0058s 
-- initialize_schema_migrations_table() 
    -> 0.0092s 

沒有錯誤。但表格尚未創建。

我通過調查Nginx的錯誤日誌中發現了這一點,但重現錯誤的最簡單方法是火起來的控制檯,並與應用程序的唯一模式做任何事情:

$ rails console production 
Loading production environment (Rails 4.2.0.beta4) 
2.1.3 :001 > all_users = User.all 
PG::UndefinedTable: ERROR: relation "users" does not exist 
LINE 1: SELECT "users".* FROM "users" 
         ^

我也SSH進入數據庫服務器並用\z檢查數據庫,但它不在那裏。

我認爲應用程序正確地連接到數據庫服務器,因爲之前我得到權限錯誤,並且我解決了這些錯誤。但我不知道如何確定。如果我確認我連接正確,那麼我該從哪裏出發?

謝謝!

+1

您的'db:reset'是否針對您要連接的同一個數據庫運行? – 2014-10-30 23:57:32

+1

如果您有權限訪問,請查看postgresql日誌文件,您可以在$ PGDATA/pg_log /中找到該文件。您的應用程序未報告錯誤的可能性很大。 – harmic 2014-10-31 00:02:12

+0

我有完整的訪問權限。我檢查出來了,它有基本相同的錯誤。所以我認爲這證實配置是可以的;也就是說,錯誤發生在數據庫服務器上。有一點細節,一行沒有在網絡服務器上顯示: '2014-10-30 19:03:06 EDTERROR:關係「用戶」不存在於字符323' – hoverbikes 2014-10-31 00:23:45

回答

1

按照mu的建議,我運行了rake db:reset,明確指定了環境。

​​

這在問題的心臟發現錯誤:

PG::ObjectInUse: ERROR: database "database_name" is being accessed by other users 
DETAIL: There are 1 other session(s) using the database. 

我SSH方式登錄到數據庫服務器,killed all active connections,並重新啓動該服務。

回到網絡服務器上,我重新執行了上面的rake任務,它工作。感謝mu和harmic!