Postgresql PG::未定义-下一个故障排除步骤?
我有一个Rails应用程序,在开发和测试中运行良好,但在生产中,它被配置为使用远程Postgresql数据库,无法创建表。数据库已设置并正在运行。我可以通过psql作为应用程序从生产服务器连接到它,使用我在database.yml中指定的相同配置,然后我可以使用命令创建和查询表,没有问题 当我执行与数据库相关的rake任务时,一切看起来都很好:Postgresql PG::未定义-下一个故障排除步骤?,postgresql,ruby-on-rails-4.2,Postgresql,Ruby On Rails 4.2,我有一个Rails应用程序,在开发和测试中运行良好,但在生产中,它被配置为使用远程Postgresql数据库,无法创建表。数据库已设置并正在运行。我可以通过psql作为应用程序从生产服务器连接到它,使用我在database.yml中指定的相同配置,然后我可以使用命令创建和查询表,没有问题 当我执行与数据库相关的rake任务时,一切看起来都很好: $ rake db:reset -- create_table("users", {:force=>true}) -> 0.0293s
$ 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
检查了数据库,但它不在那里
我认为该应用程序已正确连接到数据库服务器,因为之前我收到了权限错误,我已解决了这些错误。但我不知道如何确定。如果我确认连接正确,我该怎么做
谢谢 根据mu的建议,我运行了
rakedb:reset
,明确指定了环境
rake db:reset RAILS_ENV=production --trace
这揭示了问题的核心错误:
PG::ObjectInUse: ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
我使用ssh连接到数据库服务器,并重新启动了服务
回到web服务器上,我重新运行了上面的rake任务,它成功了。谢谢穆和哈米奇 您的
db:reset
是否在连接到的同一数据库上运行?如果您有访问权限,请检查postgresql日志文件,您可以在$PGDATA/pg_log/中找到该文件。可能发生了应用程序未报告的错误。我具有完全访问权限。我检查过了,它基本上有相同的错误。所以我想这证实了配置是正确的;也就是说,错误发生在DB服务器上。还有一点更详细,Web服务器上没有显示一行:2014-10-30 19:03:06 edt错误:关系“users”在字符323处不存在