Heroku未定义表错误

时间:2016-01-06 11:36:38

标签: ruby-on-rails ruby-on-rails-4 heroku

我刚刚安装了Heroku并尝试让我的应用程序在其上运行。

我收到此错误

2016-01-06T11:27:26.741740+00:00 app[web.1]: => Rails 4.2.0 application starting in production on http://0.0.0.0:47038
2016-01-06T11:27:26.741741+00:00 app[web.1]: => Run `rails server -h` for more startup options
2016-01-06T11:27:26.741741+00:00 app[web.1]: => Ctrl-C to shutdown server
2016-01-06T11:27:26.741742+00:00 app[web.1]: Started GET "/" for 122.104.136.142 at 2016-01-06 11:27:26 +0000
2016-01-06T11:27:26.800681+00:00 app[web.1]: Processing by ProductsController#home as HTML
2016-01-06T11:27:26.819306+00:00 app[web.1]:   Product Load (1.5ms)  SELECT  "products".* FROM "products" LIMIT 30 OFFSET 0
2016-01-06T11:27:26.819330+00:00 app[web.1]: PG::UndefinedTable: ERROR:  relation "products" does not exist
2016-01-06T11:27:26.819331+00:00 app[web.1]: LINE 1: SELECT  "products".* FROM "products" LIMIT 30 OFFSET 0
2016-01-06T11:27:26.819332+00:00 app[web.1]:                                   ^
2016-01-06T11:27:26.819332+00:00 app[web.1]: : SELECT  "products".* FROM "products" LIMIT 30 OFFSET 0
2016-01-06T11:27:26.819793+00:00 app[web.1]:   Rendered products/_product_display.html.erb (5.4ms)
2016-01-06T11:27:26.819862+00:00 app[web.1]:   Rendered products/home.html.erb within layouts/application (7.9ms)
2016-01-06T11:27:26.819966+00:00 app[web.1]: Completed 500 Internal Server Error in 19ms

我知道我的迁移是填充的,如果我删除了数据库,我就无法运行rake db:migrate而不会在本地获得相同的错误。为了让他们工作,我运行rake db:drop然后rake db:create然后rake db:schema:load。它加载架构并rake db:migrate工作。

有没有办法在Heroku中加载架构,就像我在本地一样?或任何其他方式让这个工作?

3 个答案:

答案 0 :(得分:0)

通常,您应该能够像在本地一样在Heroku上运行所有相同的rake命令(假设您已经在两端运行相同的代码)。

你试过了吗?

heroku run rake db:drop
heroku run rake db:create
heroku run rake db:schema:load
heroku run rake db:migrate

或者您是在尝试修复它而不丢弃您的heroku数据库或类似的东西?

答案 1 :(得分:0)

将数据库放在Heroku上:

heroku pg:reset SHARED_DATABASE --confirm APP_NAME

然后再次迁移数据库:

heroku run rake db:migrate

希望这有帮助。

答案 2 :(得分:0)

尝试'heroku run rake db:reset'然后'heroku run rake db:migrate'。

这应该