Heroku Rails - ActiveRecord :: UnknownAttributeError(未知属性' user_id'用于时间表。):

时间:2015-11-09 14:42:03

标签: ruby-on-rails-4 heroku

这个问题令我难过。

当部署到Heroku时,我得到了错误但不是本地错误,这表明db

有问题

将其引用

 class StaticPagesController < ApplicationController

  def home

    if logged_in?
      @project = current_user.projects.build if logged_in?
      **@timetable = current_user.timetables.build if logged_in?**
      @feed_items = current_user.feed.paginate(page: params[:page]).reorder("project_due_date ASC")
      @feed_items3 = current_user.feed3.paginate(page: params[:page], :per_page => 1)
    end
  end

我已经尝试了

Heroku run db:migrate and Heroku restart 

仍然是同样的错误

这可能是因为我有某种方式错误的架构,但是当影响Heroku但不影响localhost的时候?

网址= https://radiant-sea-5676.herokuapp.com/

编辑 - 它似乎在没有登录Heroku时工作​​,但在登录时崩溃。在localhost上以任何一种方式工作。

再次编辑 - 通过Heroku检查架构显示,即使迁移后,用户iD列也没有用户iD的索引设置。

    create_table "timetables", force: :cascade do |t|
    t.string   "name",       limit: 255
    t.string   "attachment", limit: 255
    t.datetime "created_at",             null: false
    t.datetime "updated_at",             null: false
  end

5 个答案:

答案 0 :(得分:2)

直到有人得到更好的解释或回答我必须做的是去Heroku仪表板并删除ClearDB数据库,然后创建一个新的。

我使用

配置了应用
heroku config | grep CLEARDB_DATABASE_URL

heroku config:set DATABASE_URL='mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true'

然后运行heroku run rake db:migrate并使用正确的Schema(包括外键)重建数据库。

答案 1 :(得分:2)

您无需删除或重置数据库。显然,在生产模式下运行时,数据库模式已缓存。因此,每当进行迁移时,都需要使用heroku restart命令跟进迁移,以加载更新的架构。

答案 2 :(得分:1)

忽略我的最后一个答案,当我登录您的网站并访问时间表页面时,我发现了这个问题。

您的架构可能已损坏,这可能会不时发生,尤其是在运行它们之后更改迁移时。

尝试以下方法:

  • on localhost,删除架构,删除数据库并再次迁移
  • 在localhost上,删除浏览器中的所有Cookie或尝试使用其他Cookie,因为旧Cookie可能会掩盖问题
  • on heroku,推送新架构后,运行k而不是rake db:migrate再次迁移

希望这有帮助

了解发生这种情况的原因非常重要,您是否可以建议您在运行之后是否修改了任何迁移?我学到了很难,你不能这样做!

答案 3 :(得分:0)

找到一个很好的解决方案,当模式不同步时,它需要销毁数据库并构建一个干净的数据库。重置数据库可以使模式保持原样,因此无用。

  1. 在本地运行rake db:drop db:create db:migrate db:schema:dump db:setup并将任何架构更改推送到heroku。
  2. 通过heroku restart重新启动您的dynos,这会切断所有数据库连接,因此您不会遇到问题。您也可以切换到维护模式。
  3. 运行heroku run 'rake db:drop db:create db:migrate db:schema:dump db:setup'
  4. 它有点hacky,但基本上对数据库执行硬重置。您可能不需要运行最后两个命令。

答案 4 :(得分:0)

第 1 步:在本地重置您的数据库:

 rails db:drop:db:create db:migrate db:schema:dump db:setup

如果您遇到 db:drop 的错误,您可以使用 :_unsafe 方式来解决!我不确定这会做什么,但它会强制删除数据库! (您将丢失所有本地存储的数据)

因此,如果您遇到该错误,请使用此(而不是第 1 步):

 rails db:drop:_unsafe db:create db:migrate db:schema:dump db:setup

第 2 步:git 和 GitHub:

git add .
git commit -am 'dropped and recreated DB'
git push

第 2 步:重置您的 Heroku 数据库:

this link 中的精彩讨论!

heroku restart
heroku pg:reset DATABASE            (no need to change the DATABASE)
heroku run rake db:migrate
heroku run rake db:seed             (if you have seed)