在Heroku上完成用户注册时发生500次内部服务器错误
问题描述:
我已将在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的版本号,并再次安装了捆绑软件
- *上的类似问题表明问题可能在于注册后的电子邮件确认。但是,我没有在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
答
可能这是问题:
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
答
你尝试运行耙分贝:迁移?您也可以通过Web仪表板运行迁移。有时rails rails:migrate在heroku中不起作用。你是否也尝试通过控制台创建一个新用户?
'app/models/user.rb:150:in set_pinned_posts' 这就是您的错误发生的地方。也许发布您的模型代码,以便我们可以帮助? – lacostenycoder
谢谢,我已经添加了方法(在此方法中,我设置了“虚假帖子”来固定并更改其发布时间)。 – OhDaeSu