【问题标题】:ActionView::Template::Error (PG::Error: ERROR: column users.remember_token does not existActionView::Template::Error (PG::Error: ERROR: 列 users.remember_token 不存在
【发布时间】:2014-02-21 15:10:06
【问题描述】:

我正在学习 Hartl 的教程,刚刚完成第 8 章并尝试推送到 Heroku。这样做后,我检查了 Heroku 日志,发现我收到了一个错误:

2014-02-21T04:22:37.252893+00:00 app[web.1]: LINE 1: SELECT  "users".* FROM "users"  WHERE "users"."remember_toke...
2014-02-21T04:22:37.252893+00:00 app[web.1]:                                                  ^
2014-02-21T04:22:37.252893+00:00 app[web.1]: : SELECT  "users".* FROM "users"  WHERE "users"."remember_token" = 'da39a3ee5e6b4b0d3255bfef95601890afd80709' LIMIT 1
2014-02-21T04:22:37.252893+00:00 app[web.1]: LINE 1: SELECT  "users".* FROM "users"  WHERE "users"."remember_toke...
2014-02-21T04:22:37.252893+00:00 app[web.1]:                                               ^
2014-02-21T04:22:37.252893+00:00 app[web.1]: PG::Error: ERROR:  column users.remember_token does not exist
2014-02-21T04:22:37.252893+00:00 app[web.1]: PG::Error: ERROR:  column users.remember_token does not exist
2014-02-21T04:22:37.253670+00:00 app[web.1]:   Rendered layouts/_header.html.erb (3.7ms)
2014-02-21T04:22:37.253670+00:00 app[web.1]:   Rendered layouts/_header.html.erb (3.7ms)
2014-02-21T04:22:37.253827+00:00 app[web.1]: Completed 500 Internal Server Error in 7ms
2014-02-21T04:22:37.253827+00:00 app[web.1]: Completed 500 Internal Server Error in 7ms
2014-02-21T04:22:37.255866+00:00 app[web.1]:
2014-02-21T04:22:37.255866+00:00 app[web.1]: ActionView::Template::Error (PG::Error: ERROR:  column users.remember_token does not exist
2014-02-21T04:22:37.255866+00:00 app[web.1]:                                               ^

我提供了 schema.rb 以表明我已经运行了 rake db:migrate: schema.rb:

    ActiveRecord::Schema.define(version: 20140219015149) do

  create_table "users", force: true do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "password_digest"
    t.string   "remember_token"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["remember_token"], name: "index_users_on_remember_token"

end

我正在为这个特定项目使用 sqlite。我已经阅读了一些关于使用 Postgres 和区分大小写的 heroku 的内容。不幸的是,这对我的问题没有帮助,因为无论如何我都以小写形式创建了列标签。

我是个菜鸟,这是我遇到的第一个 Heroku 错误。我什至不知道日志将错误追溯到哪里。非常感谢您能散发的任何光芒。如果我需要提供任何其他文件,请告诉我。

【问题讨论】:

  • 要检查 remember_token 是否真的存在于您的数据库中,请在 SQLite 中运行 rails db 然后 .schema users。这将显示用于创建 users 表的 SQL 语句。

标签: ruby-on-rails ruby heroku


【解决方案1】:

您可能已经在本地运行了迁移,但您是否在 Heroku 上运行过?

heroku run rake db:migrate

会为你做的

【讨论】:

  • 完美运行,谢谢!如果您有时间,是否有理由在本地运行 rake db:migrate,推送到 git,然后推送 heroku 仍然需要在 heroku 上运行迁移?
  • 是的,因为当您在本地运行它时,您正在更新本地数据库的架构。然后,当您将代码推送到 Heroku 时,您需要对远程数据库应用相同的更改。每当您对架构进行更改时,您都需要记住进行迁移。
【解决方案2】:

检查事项:

首先,确保该列存在于您的本地数据库 (SQLite) 中:

$ rails db
sqlite> .schema users

接下来,确保 Heroku (PostgreSQL) 上存在该列:

$ heroku pg:psql
psql> \d+ users

可能的问题:

在将 remember_token 添加到 User 模型后,您可能忘记在推送到 Heroku 之前将代码提交到 Git 存储库。运行:

$ git status

这将显示您是否有任何尚未提交的已修改文件。

【讨论】:

    猜你喜欢
    • 2017-03-14
    • 2015-05-11
    • 2019-09-21
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多