2017-10-18 26 views
0

我已将在Rails中完成的项目复制到另一个文件夹中。当我想使用Devise gem创建/注册一个新用户时,它可以在我的电脑本地工作。然而,当我想要做在Heroku一样,Heroku的日志给我的这些错误(500内部服务器错误和NoMethodError(未定义的方法'身份证”的零:NilClass)用户):在Heroku上完成用户注册时发生500次内部服务器错误

2017-10-18T09:13:44.841868+00:00 app[web.1]: D, [2017-10-18T09:13:44.841788 #4] DEBUG -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] (1.2ms) ROLLBACK 
2017-10-18T09:13:44.844378+00:00 app[web.1]: I, [2017-10-18T09:13:44.844294 #4] INFO -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] Completed 500 Internal Server Error in 1109ms (ActiveRecord: 122.8ms) 
2017-10-18T09:13:44.845813+00:00 app[web.1]: F, [2017-10-18T09:13:44.845733 #4] FATAL -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] 
2017-10-18T09:13:44.845955+00:00 app[web.1]: F, [2017-10-18T09:13:44.845867 #4] FATAL -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] NoMethodError (undefined method `id' for nil:NilClass): 
2017-10-18T09:13:44.846016+00:00 app[web.1]: F, [2017-10-18T09:13:44.845935 #4] FATAL -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] 
2017-10-18T09:13:44.846141+00:00 app[web.1]: F, [2017-10-18T09:13:44.846063 #4] FATAL -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] app/models/user.rb:150:in `set_pinned_posts' 
2017-10-18T09:13:44.846302+00:00 app[web.1]: F, [2017-10-18T09:13:44.846146 #4] FATAL -- : [8944a6a0-36d4-4f3a-b4e2-967d5273ae3c] app/controllers/users/registrations_controller.rb:3:in `create' 

的用户表存在,但是我无法在Heroku上创建用户。

什么我迄今所做的:

  • 迁移与heroku run rails db:migrate
  • 数据库重新启动的Heroku服务器heroku restart -a appname
  • 我还使用AWS S3亚马逊的回形针创业板在这个项目中,我使用了我也用于其他两个项目的相同键。另外两个项目工作得很好。 (例如,密钥是:AWS访问密钥,AWS区域,AWS秘密访问密钥,密钥基础)。这可能是问题吗?
  • 删除了我的gemfile中的pg gem的版本号,并再次安装了捆绑软件
  • Stackoverflow上的类似问题表明问题可能在于注册后的电子邮件确认。但是,我没有在Devise上激活电子邮件确认。

错误消息的用户模型的方法:

class User < ApplicationRecord 
    after_create :set_pinned_posts 

    ... 

    def set_pinned_posts 
    Fpost.where(pinned: true).all.each do |post| 
     self.randomized_fposts.where(fpost_id: post.id).each do |post| 
     post.set_faketime_for_pinnedposts 
     end 
    end 

    first = Fpost.where(pinned: true).first 
    last = Fpost.where(pinned: true).last 

    self.randomized_fposts.where(fpost_id: first.id).update_all(fake_time: 1.days.ago) 
    self.randomized_fposts.where(fpost_id: last.id).update_all(fake_time: 30.days.ago) 
    end 
end 
+0

'app/models/user.rb:150:in set_pinned_posts' 这就是您的错误发生的地方。也许发布您的模型代码,以便我们可以帮助? – lacostenycoder

+0

谢谢,我已经添加了方法(在此方法中,我设置了“虚假帖子”来固定并更改其发布时间)。 – OhDaeSu

回答

2

可能这是问题:

first = Fpost.where(pinned: true).first 
last = Fpost.where(pinned: true).last 

与第一= Fpost.where(固定:真)返回零。 (你有没有在这个阶段连接到用户的任何Fpost对象?)

这可以解释你的错误“NoMethodError(未定义的方法'身份证”的零:NilClass):”被抛出此:

.... .where(fpost_id: first.id) ... 

由于id在nil上被调用。

+1

噢,我的天啊,就是这样,非常感谢。我已经忘记种下我的“Fposts”,因此没有FPosts.'heroku运行rake db:seed'解决了它。 – OhDaeSu

1

你尝试运行耙分贝:迁移?您也可以通过Web仪表板运行迁移。有时rails rails:migrate在heroku中不起作用。你是否也尝试通过控制台创建一个新用户?

相关问题