【问题标题】:Heroku Rails - ActiveRecord::UnknownAttributeError (unknown attribute 'user_id' for Timetable.):Heroku Rails - ActiveRecord::UnknownAttributeError(时间表的未知属性'user_id'。):
【发布时间】:2016-02-10 05:53:08
【问题描述】:

这个问题把我难住了。

当部署到 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

【问题讨论】:

    标签: ruby-on-rails-4 heroku


    【解决方案1】:

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

    【讨论】:

      【解决方案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 并使用正确的架构(包括外键)重建数据库。

      【讨论】:

        【解决方案3】:

        忽略我的上一个回答,当我登录您的网站并访问时间表页面时,我看到了这个问题。

        您的架构可能已损坏,这种情况有时会发生,尤其是当您在运行迁移后更改迁移时。

        尝试以下方法:

        • 在本地主机上,删除您的架构,删除您的数据库并再次迁移
        • 在 localhost 上,从浏览器中删除所有 cookie 或尝试使用另一个 cookie,因为旧 cookie 可能掩盖了问题
        • 在 heroku 上,推送新架构后,运行 heroku pg:reset DATABASE --confirm name-of-your-app,然后再次 rake db:migrate

        希望对你有帮助

        找出发生这种情况的原因很重要,那么您能否建议您在运行迁移后是否修改了任何迁移?我学到了很难做到的事情!

        【讨论】:

        • 本地主机工作正常。实际上 enver 有一个问题,但是当我使用 heroku run "bundle exec rake db:schema:dump && cat db/schema.rb" 检查 Heroku 上的 Schema 时,它缺少 add_index "timetables", ["user_id"], name:" index_timetables_on_user_id”,使用::btree ...它用于项目。这从哪里来的项目?它看起来是自动生成的,因为项目没有 user_id 参数,但正在添加它
        • Schema pastebin.com/1DJF69Zr 的Pastebin。请注意在 Timetables 之后缺少 Index 行以及关于外键的最后一行。
        • 实际上必须从 Heroku 中删除 ClearDB 应用程序,设置一个新应用程序。将“heroku config:set DATABASE_URL=”更改为新的 ClearDB。在此之后 Heroku 运行 rake:migrate 正确处理并插入了正确的外键。本地命令 rake db:reset 似乎是解决方案,但在使用 ClearDB 时,该命令在 Herky 上不起作用。
        【解决方案4】:

        当架构不同步时找到了一个很好的解决方案,但它需要销毁数据库并建立一个干净的数据库。重置数据库使架构保持原样,因此没有用。

        1. 在本地运行 rake db:drop db:create db:migrate db:schema:dump db:setup 并将任何架构更改推送到 heroku。
        2. 通过heroku restart 重新启动您的测功机,这将切断所有数据库连接,因此您不会遇到问题。您还可以切换到维护模式。
        3. 运行heroku run 'rake db:drop db:create db:migrate db:schema:dump db:setup'

        这有点hacky,但基本上是对数据库执行硬重置。您可能不需要运行最后两个命令。

        【讨论】:

        • 推送任何架构更改是指heroku run rails db:migrate??如果是这种情况,请更新答案!
        • 不,我的意思是运行该命令可能会影响本地架构,您应该将这些更改推送到 heroku,但又一次,因为我们实际上并没有执行 `db:schema:load` 所以它没关系。只需按照上面的说明进行操作,记住它会擦除你的 heroku 数据库。
        • 感谢您的回复
        【解决方案5】:

        第 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-12
          • 2013-04-09
          相关资源
          最近更新 更多