0

Heroku、Devise、Sendgrid を使用しています。

これらは私の設定ですenvironment/production.rb

  config.action_mailer.default_url_options = { :host => 'myapp.herokuapp.com' }

  # ActionMailer Config
  # Setup for production - deliveries, no errors raised
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.default :charset => "utf-8"

  config.action_mailer.smtp_settings = {
    address: "smtp.sendgrid.net",
    port: 25,
    domain: "myapp.herokuapp.com",
    authentication: "plain",
    user_name: ENV["SENDGRID_USERNAME"],
    password: ENV["SENDGRID_PASSWORD"]
  }

Heroku で変数をうまく設定しENVました。アカ​​ウントを登録すると、正しいメール アドレスにメールが正しく送信されます。

確認リンクをクリックすると、たくさんのエラーが表示され、アカウントが確認されません。

Started GET "/users/confirmation?confirmation_token=dZf6Jqc7x88q8tyH5bZp" for XX.XX.XX.XX at 2013-05-20 20:59:29 +0000
2013-05-20T20:59:29.413847+00:00 app[web.1]: 
2013-05-20T20:59:29.413847+00:00 app[web.1]: NameError (uninitialized constant Confirmation):
2013-05-20T20:59:29.413847+00:00 app[web.1]:   

編集 1

これは私User.rbの工夫の部分です:

class User < ActiveRecord::Base
  rolify
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :role_ids, :as => :admin
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me

編集 2

これは、私development.logが同じことをすると私の中で起こることです。

Started GET "/users/confirmation?confirmation_token=Gs3UYE2m6D84zfuXfa66" for 127.0.0.1 at 2013-05-20 17:12:39 -0500
Processing by ConfirmationsController#show as HTML
  Parameters: {"confirmation_token"=>"Gs3UYE2m6D84zfuXfa66"}
Completed 500 Internal Server Error in 10ms

NameError - uninitialized constant Confirmation:
  (gem) activesupport-3.2.13/lib/active_support/dependencies.rb:520:in `load_missing_constant'

すべての移行を実行しましたが、Confirmableモジュールの新しい移行を生成する必要があるのでしょうか? それ、どうやったら出来るの?

編集 3

これは、私のusersテーブルがどのschema.rbように見えるかです:

  create_table "users", :force => true do |t|
    t.string   "email",                  :default => "", :null => false
    t.string   "encrypted_password",     :default => "", :null => false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          :default => 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at",                             :null => false
    t.datetime "updated_at",                             :null => false
    t.string   "name"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    t.float    "sales_today"
    t.float    "sales_this_week"
    t.float    "sales_lifetime"
    t.boolean  "is_seller"
  end

それで、Confirmableモジュールはすべてセットアップされているようです。

編集 4

私は実際にオーバーライドすることを忘れていましたConfirmationsController:

class ConfirmationsController < Devise::ConfirmationsController
  load_and_authorize_resource

  protected
    def after_confirmation_path_for(resource_name, resource)
      if resource.has_role? :seller
        new_item_path
      else
        root_path
      end
    end
end
4

1 に答える 1

0

モデルを追加したときに:confirmable、データベースの移行を忘れていたようです。これらの行でわかります

Started GET "/users/confirmation?confirmation_token=dZf6Jqc7x88q8tyH5bZp" for XX.XX.XX.XX at 2013-05-20 20:59:29 +0000
2013-05-20T20:59:29.413847+00:00 app[web.1]: 
2013-05-20T20:59:29.413847+00:00 app[web.1]: NameError (uninitialized constant Confirmation):

主に

NameError (uninitialized constant Confirmation):

エラーはアプリのどこかにあります。deviseはおそらくDBテーブルなしでモデルをセットアップすることさえできないので、私はデータベースで推測しています。

ConfirmationsController をオーバーライドしました。superオーバーライドするすべてのメソッドを呼び出すことを忘れないでください。

また、 schema.rb が列が存在すると言っているからといって、実際に存在するとは限りません。バージョン管理への移行を確認してください。そうしないと、サーバーに到達しません。

今:あなたの端末に行き、実行してくださいheroku run rails console。そこでいくつかのコードを試し、取得したエラー ログを投稿してください。これは非常に強力なツールです。

一番、

ブライアン

于 2013-05-20T22:10:39.910 に答える