2015-07-08 1 views
0

Я пытаюсь добавить пароль в мое приложение, следуя руководству Майкла Хартла. В localhost: 3000, когда я ввожу свой адрес электронной почты для отправки пароля, он говорит, что он работает (я получаю flash [: success], как это запрограммировано). Затем, когда я посещаю просмотр почтовой программы и меняю свой пароль, он работает (хотя на самом деле я не получаю электронное письмо, поэтому я не знаю, действительно ли создается reset_digest или нет, потому что user_mailer_preview автоматически создает его для первого пользователя . в базе данных (меня)Сброс пароля дает мне ошибку 500 в производстве

Однако в производстве (на Heroku), когда я ввожу свою электронную почту, чтобы отправить сброс пароля, я просто получаю ошибку 500 Вот мой Heroku журналы:.

2015-07-08T16:55:11.773924+00:00 app[web.1]: Started GET "/password_resets/new" for 71.202.16.30 at 2015-07-08 16:55:11 +0000 
2015-07-08T16:55:11.855679+00:00 app[web.1]: Rendered password_resets/new.html.erb within layouts/application (3.5ms) 
2015-07-08T16:55:11.862888+00:00 app[web.1]: Rendered layouts/_nav.html.erb (1.4ms) 
2015-07-08T16:55:11.865474+00:00 app[web.1]: Completed 200 OK in 34ms (Views: 19.3ms | ActiveRecord: 0.0ms) 
2015-07-08T16:55:11.831107+00:00 app[web.1]: Processing by PasswordResetsController#new as HTML 
2015-07-08T16:55:11.860630+00:00 app[web.1]: Rendered layouts/_head.html.erb (2.7ms) 
2015-07-08T16:55:11.864807+00:00 app[web.1]: Rendered layouts/_footer.html.erb (0.9ms) 
2015-07-08T16:55:11.871089+00:00 heroku[router]: at=info method=GET path="/password_resets/new" host=readlio.herokuapp.com request_id=4fca3717-319b-4d23-9a55-6e7795caa6ef fwd="71.202.16.30" dyno=web.1 connect=2ms service=99ms status=200 bytes=4219 
2015-07-08T16:55:15.372791+00:00 app[web.1]: Completed 500 Internal Server Error in 138ms 
2015-07-08T16:55:15.230300+00:00 app[web.1]: Started POST "/password_resets" for 71.202.16.30 at 2015-07-08 16:55:15 +0000 
2015-07-08T16:55:15.234361+00:00 app[web.1]: Processing by PasswordResetsController#create as HTML 
2015-07-08T16:55:15.254529+00:00 app[web.1]: User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 LIMIT 1 [["email", "[email protected]"]] 
2015-07-08T16:55:15.234393+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"XoYIZsoFM7aDANpKPO9DlxWDKlRe1OGBrXO1PBGJHVS89AmlU2aKExmGgH9/mUWNwrK3eq9pzMo+AJx384Bt9Q==", "password_reset"=>"[FILTERED]", "commit"=>"Submit"} 
2015-07-08T16:55:15.374555+00:00 app[web.1]: 
2015-07-08T16:55:15.374558+00:00 app[web.1]: NoMethodError (undefined method `reset_digest=' for #<User:0x007ff5bbb90f88>): 
2015-07-08T16:55:15.374562+00:00 app[web.1]: app/controllers/password_resets_controller.rb:12:in `create' 
2015-07-08T16:55:15.374560+00:00 app[web.1]: app/models/user.rb:47:in `create_reset_digest' 
2015-07-08T16:55:15.374563+00:00 app[web.1]: 
2015-07-08T16:55:15.374564+00:00 app[web.1]: 
2015-07-08T16:55:15.384624+00:00 heroku[router]: at=info method=POST path="/password_resets" host=readlio.herokuapp.com request_id=09d2d771-1119-4fa9-abc8-c47d30e95497 fwd="71.202.16.30" dyno=web.1 connect=0ms service=154ms status=500 bytes=1714 
2015-07-08T16:55:15.590920+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=readlio.herokuapp.com request_id=95cb9d84-534a-4d8e-9290-172721301867 fwd="71.202.16.30" dyno=web.1 connect=1ms service=4ms status=200 bytes=188 

Вот часть моего контроллера:

def create 
    @user = User.find_by(email: params[:password_reset][:email].downcase) 
    if @user 
     @user.send_password_reset_email 
     flash[:info] = "An email was sent to " + @user.email + " with password reset instructions." 
     redirect_to login_url 
    else 
     flash.now[:danger] = "Hmm. We don't recognize that email. Make sure you signed up with this email." 
     render 'new' 
    end 
    end 

A ой вот часть моей пользовательской модели с create_reset_digest:

def create_reset_digest 
    self.reset_token = User.new_token 
    update_attribute(:reset_digest, User.digest(reset_token)) 
    update_attribute(:reset_sent_at, Time.zone.now) 
    end 

    def send_password_reset_email 
    UserMailer.password_reset(self).deliver_now 
    end 

Так это говорит мне, что нет такого метода, как reset_digest, который я смущен, потому что я никогда не называю это. Я звоню @user.create_reset_digest в def create, и я думаю, что это линия, которую вызывают heroku logs. Как я могу решить эту ошибку?

ответ

1

Так что это говорит мне, что нет такого метода, как reset_digest, который Я смущен, потому что я на самом деле не назову это. Я называю @ user.create_reset_digest в Защите создать, и я думаю, что это линия , что журналы Heroku вызывают из

Нет! @user.create_reset_digest вызывает в вашем user.rbcreate_reset_digest, который на самом деле обновлениеreset_digest в этой линии update_attribute(:reset_digest, User.digest(reset_token))

NoMethodError (неопределенный метод `reset_digest = 'для пользователя: 0x007ff5bbb90f88

Я считаю, что вы Ждут' t введите миграции на heroku. Вы должны выполнить миграцию с помощью следующей команды.

heroku run rake db:migrate 

Это должно решить вашу проблему.

+1

Ах это было так просто! Благодаря! – Olivia

 Смежные вопросы

  • Нет связанных вопросов^_^