我已将我在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 restart -a appname
错误消息中的用户模型方法:
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 :(得分: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中不起作用。您是否尝试通过控制台创建新用户?