1

私はdeviseを使用していて、パスワードをリセットしようとするまで、すべてが機能していると思いました。以下のエラーが発生します。Deviseはlayout/emailというテンプレートを見つけることができません。なぜそれが欲しいのですか?フォームが投稿された後、デバイスがユーザーのサインインページにリダイレクトされるという印象を受けました。

デバイスは「reset_password_instructions.html.haml」ファイルを見つけるのに問題があると思われます。これは、リセットトークンを明確に生成できるためですが、実際には電子メールは送信されません。以下のエラーメッセージに基づいて、それは正しい診断のように聞こえますか?

これを修正するにはどうすればよいですか?コントローラーを上書きしてデバイスを変更する必要があると思いますが、よくわかりません。助言がありますか?

Started POST "/users/password" for 127.0.0.1 at 2012-08-06 05:52:42 -0500
    Processing by Devise::PasswordsController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"kGvuZiu+iu1HAx9xf4RsISj2SM410uLRoR6RbiJcBQw=", "user"=>{"email"=>"test1@example.com"}, "commit"=>"Send me reset password instructions"}
      User Load (6.0ms)  SELECT "users".* FROM "users" WHERE "users"."email" = 'test1@example.com' LIMIT 1
      User Load (1.3ms)  SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = '5QZVFAsq2ev22gpQfe9i' LIMIT 1
       (0.1ms)  BEGIN
       (3.0ms)  UPDATE "users" SET "reset_password_token" = '5QZVFAsq2ev22gpQfe9i', "reset_password_sent_at" = '2012-08-06 10:52:42.591763', "updated_at" = '2012-08-06 10:52:42.593474' WHERE "users"."id" = 2
       (0.5ms)  COMMIT
    DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:haml] instead. (called from call at /Users/bendowney/.rvm/gems/ruby-1.9.3-p194@global/gems/sass-3.1.19/lib/sass/plugin/rack.rb:54)
    DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:haml] instead. (called from call at /Users/bendowney/.rvm/gems/ruby-1.9.3-p194@global/gems/sass-3.1.19/lib/sass/plugin/rack.rb:54)
    Completed 500 Internal Server Error in 113ms

    ActionView::MissingTemplate (Missing template layouts/email with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml]}. Searched in:
      * "/Users/bendowney/Sites/RobotimusApp/app/views"
      * "/Users/bendowney/.rvm/gems/ruby-1.9.3-p194@RobotimusApp/gems/devise-2.1.2/app/views"
    ):
      actionpack (3.2.5) lib/action_view/path_set.rb:58:in `find'
      actionpack (3.2.5) lib/action_view/lookup_context.rb:109:in `find'
      actionpack (3.2.5) lib/action_view/renderer/abstract_renderer.rb:3:in `find_template'
      actionpack (3.2.5) lib/action_view/renderer/template_renderer.rb:79:in `resolve_layout'
      actionpack (3.2.5) lib/action_view/renderer/template_renderer.rb:86:in `resolve_layout'
      actionpack (3.2.5) lib/action_view/renderer/template_renderer.rb:69:in `block in find_layout'
      actionpack (3.2.5) lib/action_view/lookup_context.rb:228:in `with_layout_format'
#...etc
4

1 に答える 1

2

Deviseは、ユーザーをリダイレクトする前に、リセットトークンを含む電子メールを送信します。メールを送信するには、テンプレートとレイアウトも必要です。あなたの場合、コードのどこかでlayout 'email'ActionMailerクラスを指定したが、実際にはこのレイアウトテンプレートを作成しなかったため、この手順は失敗します。

app/views/layouts/email.html.haml少なくともこれを含むファイルを追加してみてください。

= yield

(または<%= yield %>.html.erbテンプレート内)。

于 2012-08-06T11:35:58.020 に答える