2015-11-09 63 views
1

这个问题让我难堪。Heroku Rails - ActiveRecord :: UnknownAttributeError(未知属性'user_id'的时间表。):

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

还是个问题相同的错误

这可能是事实,我有模式错了某些BU什么时候会影响Heroku而不是本地主机?

URL = https://radiant-sea-5676.herokuapp.com/

编辑 - 这似乎在登录状态下,当没有登录在Heroku,但崩溃上班工作在本地主机上任何一种方式。

再次编辑 - 通过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 

回答

1

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

我配置的应用程序与

heroku config | grep CLEARDB_DATABASE_URL 

heroku config:set DATABASE_URL='mysql://adffdadf2341:[email protected]/heroku_db?reconnect=true' 

然后跑了Heroku的运行耙分贝:迁移并使用了正确的架构,包括外键重建数据库。

1

忽略我最后的答案,我在登录到您的网站并访问时间表页面时看到了问题。

您的模式可能会损坏,这可能会不时发生,特别是如果您在运行后更改迁移。

尝试以下操作:

  • 在本地主机上,删除你的模式,减少您的数据库,并在本地主机上再次
  • 迁移,从浏览器中删除所有Cookie或尝试使用另外一个,因为它是可能的旧Cookie被掩盖的问题
  • 在Heroku上,你推新的架构,运行heroku pg:reset DATABASE --confirm name-of-your-app比耙分贝后:再次迁移

希望这有助于

重要的是要弄清楚为什么会发生这种情况,所以您可以建议您在运行后是否修改了任何迁移?我学会了你不能那样做的艰难方式!

+0

Localhost正常工作。其实enver有一个问题,但当我检查使用Heroku的Heroku上的Schema运行“bundle exec rake db:schema:dump && cat db/schema.rb”其缺少的add_index“时间表”,[“user_id”],名称:“ index_timetables_on_user_id“,使用::btree ...它的项目。项目来自哪里?它看起来它的自动生成为没有user_id参数的项目,但有东西添加它 – ChrisM

+0

架构的Pastebin http://pastebin.com/1DJF69Zr。请注意,在时间表和关于外键的最后一行之后索引行是如何丢失的。 – ChrisM

+0

从Heroku中删除ClearDB应用程序,建立一个新的。将“heroku config:set DATABASE_URL =”更改为新的ClearDB。在这之后,Heroku运行rake:迁移正确处理并插入正确的外键。本地Command rake db:reset似乎是解决方案,但在使用ClearDB时,该命令在Heroky上不起作用。 – ChrisM

0

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

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

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

相关问题