【问题标题】:PG::UndefinedTable - Next troubleshooting step?PG::UndefinedTable - 下一个故障排除步骤?
【发布时间】:2014-12-27 05:06:56
【问题描述】:

我有一个 Rails 应用程序在开发和测试中运行良好,但在生产中,它被配置为使用远程 Postgresql 数据库,它无法创建它的表。数据库已设置并正在运行。我可以通过 psql 作为应用程序从生产服务器连接到它,使用我在 database.yml 中指定的相同配置,然后我可以使用命令创建和查询表,没问题。

当我执行与数据库相关的 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 检查了数据库,但它不存在。

我认为应用程序正在正确连接到数据库服务器,因为之前我遇到了权限错误,我已经解决了这些问题。但我不知道如何确定。如果我确实确认我连接正确,我该去哪里?

谢谢!

【问题讨论】:

  • 您的db:reset 是否针对您要连接的同一数据库运行?
  • 如果您有访问权限,请检查 postgresql 日志文件,您可以在 $PGDATA/pg_log/ 中找到该文件。可能发生了您的应用程序未报告的错误。
  • 我拥有完全访问权限。我检查了它,它具有基本相同的错误。所以我想这证实了配置是好的;也就是说,错误发生在数据库服务器上。还有一点细节,网络服务器上没有显示的一行:2014-10-30 19:03:06 EDTERROR: relation "users" does not exist at character 323

标签: postgresql ruby-on-rails-4.2


【解决方案1】:

按照 mu 的建议,我运行了rake db: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 连接到数据库服务器 killed all active connections,然后重新启动了服务。

回到网络服务器,我重新运行了上面的 rake 任务,它成功了。谢谢mu和harmic!

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2013-07-15
    • 2010-11-30
    相关资源
    最近更新 更多