2014-10-30 56 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!