我有一个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"
^
我也已经进入数据库服务器并使用\z
检查数据库,但它不在那里。
我认为该应用正确连接到数据库服务器,因为之前我收到权限错误,我解决了这些问题。但我不知道如何确定。如果我确认我正确连接,我该去哪里?
谢谢!
答案 0 :(得分: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,然后重新启动该服务。
回到Web服务器上,我重新开始上面的rake任务,并且它有效。谢谢mu和harmic!