【问题标题】:Connecting Postgresql to Rails in Heroku在 Heroku 中将 Postgresql 连接到 Rails
【发布时间】:2019-07-31 19:44:44
【问题描述】:

所以我最近将我的Rails 后端服务器部署到Heroku。 经过从SQLitePostgreSQL 的传递有点挣扎之后,我终于让一切都运行起来了。 现在的问题是,我做了rake db:createrake db:migrate 并且没有任何错误,但是现在当我对服务器进行REST 调用时,我遇到了这个错误(完成):

2019-07-31T19:42:16.534355+00:00 app[web.1]: I, [2019-07-31T19:42:16.534259 #4]  INFO -- : [047c870d-8791-4ec7-90df-a7998b8b17c5] Started POST "/sessions" for 91.176.204.35 at 2019-07-31 19:42:16 +0000
2019-07-31T19:42:16.535824+00:00 app[web.1]: I, [2019-07-31T19:42:16.535063 #4]  INFO -- : [047c870d-8791-4ec7-90df-a7998b8b17c5] Processing by SessionsController#create as */*
2019-07-31T19:42:16.535947+00:00 app[web.1]: I, [2019-07-31T19:42:16.535882 #4]  INFO -- : [047c870d-8791-4ec7-90df-a7998b8b17c5]   Parameters: {"email"=>"titivermeesch@gmail.com", "password"=>"[FILTERED]"}
2019-07-31T19:42:16.566455+00:00 app[web.1]: I, [2019-07-31T19:42:16.566340 #4]  INFO -- : [047c870d-8791-4ec7-90df-a7998b8b17c5] Completed 500 Internal Server Error in 30ms (ActiveRecord: 11.2ms)
2019-07-31T19:42:16.567845+00:00 app[web.1]: F, [2019-07-31T19:42:16.567772 #4] FATAL -- : [047c870d-8791-4ec7-90df-a7998b8b17c5]   
2019-07-31T19:42:16.567954+00:00 app[web.1]: F, [2019-07-31T19:42:16.567879 #4] FATAL -- : [047c870d-8791-4ec7-90df-a7998b8b17c5] ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "users" does not exist
2019-07-31T19:42:16.567957+00:00 app[web.1]: LINE 8:                WHERE a.attrelid = '"users"'::regclass
2019-07-31T19:42:16.567959+00:00 app[web.1]:                                           ^
2019-07-31T19:42:16.567961+00:00 app[web.1]: :               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
2019-07-31T19:42:16.567962+00:00 app[web.1]:                      pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
2019-07-31T19:42:16.567964+00:00 app[web.1]:                      c.collname, col_description(a.attrelid, a.attnum) AS comment
2019-07-31T19:42:16.567965+00:00 app[web.1]:                 FROM pg_attribute a
2019-07-31T19:42:16.567966+00:00 app[web.1]:                 LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
2019-07-31T19:42:16.567968+00:00 app[web.1]:                 LEFT JOIN pg_type t ON a.atttypid = t.oid
2019-07-31T19:42:16.567969+00:00 app[web.1]:                 LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
2019-07-31T19:42:16.567971+00:00 app[web.1]:                WHERE a.attrelid = '"users"'::regclass
2019-07-31T19:42:16.567972+00:00 app[web.1]:                  AND a.attnum > 0 AND NOT a.attisdropped
2019-07-31T19:42:16.567973+00:00 app[web.1]:                ORDER BY a.attnum
2019-07-31T19:42:16.567975+00:00 app[web.1]: ):
2019-07-31T19:42:16.568064+00:00 app[web.1]: F, [2019-07-31T19:42:16.568002 #4] FATAL -- : [047c870d-8791-4ec7-90df-a7998b8b17c5]   
2019-07-31T19:42:16.568171+00:00 app[web.1]: F, [2019-07-31T19:42:16.568104 #4] FATAL -- : [047c870d-8791-4ec7-90df-a7998b8b17c5] app/controllers/sessions_controller.rb:5:in `create'

我安装了一个PostgreSQL 插件并且它正在运行。 (否则Rails 服务器甚至无法启动)。

那么为什么每次请求都会出现这种错误呢?我检查了控制台,如果我执行User.all 之类的操作,我会得到:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "users" does not exist)
LINE 1: SELECT  "users".* FROM "users" LIMIT $1
                               ^
: SELECT  "users".* FROM "users" LIMIT $1

这让我很困惑,我做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql heroku


    【解决方案1】:

    听起来您可能在本地运行了rake db:migrate,而不是在 Heroku 上。因此,当您使用 Heroku CLI 时,它无法识别 users 表,因为它还不存在。

    我相信如果你在 Gemfile 中使用 pg gem,Heroku 的系统会自动为你设置一个数据库。我已经有一段时间没有创建 Heroku 实例了,所以不要引用我的话。

    如果您不确定自己的应用中是否有 PostgreSQL,请查看应用的服务附加组件区域。 Heroku 也有更多的documentation on using PostgreSQL on their platform.,您也可以参考他们的documentation for getting started with Rails

    一旦您的 PostgreSQL 数据库设置好与您的应用程序一起使用,您就可以使用 Heroku CLI 迁移数据库并创建您的用户表:

    heroku rake db:migrate
    

    【讨论】:

    • 我还以为是直接转的,真的谢谢
    • 你必须在资源部分创建应用程序时提供 postgres。然后,您必须在每次部署时手动迁移。解决此问题的一种方法是使用每次部署时运行的发布脚本创建 Procfile。如果需要,这可以在每次部署时包括对rake db:migrate 的命令。如果从命令行运行,它也将是heroku run rake db:migrate。您需要包含run 命令才能访问工具带。
    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2018-10-16
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2014-03-30
    • 2014-04-06
    相关资源
    最近更新 更多