使用Heroku上的Devise在用户注册时完成500内部服务器错误

时间:2017-10-18 09:57:20

标签: ruby-on-rails ruby amazon-web-services heroku devise

我已将我在Rails中完成的项目复制到另一个文件夹中。当我想使用Devise gem创建/注册一个新用户时,它在我的计算机上本地工作。但是,当我想在Heroku上执行相同操作时,Heroku日志会为我提供这些错误(500内部服务器错误和NoMethodError(nil:NilClass的未定义方法`id'):

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作为Paperclip gem,在这个项目中,我使用相同的键,我也用于其他两个项目。其他两个项目工作得很好。 (例如,密钥是:AWS Access Key,AWS Region,AWS Secret Access Key,Secret Key Base)。这可能是问题吗?
  • 删除了我的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

2 个答案:

答案 0 :(得分:2)

这可能是问题所在:

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

第一个= Fpost.where(固定:真)返回nil。 (在此阶段,您是否有任何Fpost对象连接到用户?)

这可以解释你的错误&#39; NoMethodError(未定义的方法`id&#39;对于nil:NilClass):&#39;被这个抛出:

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

正在调用id为nil。

答案 1 :(得分:1)

您是否尝试过运行rake db:migrate?您还可以通过Web仪表板运行迁移。有时rails db:migrate在heroku中不起作用。您是否尝试通过控制台创建新用户?