【发布时间】: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