2016-10-24 8 views
2

Railsのバージョンを3.2から4.2.6にアップグレードし、バージョンを1.4.9から4.2.0に変更しました。私が更新パスワードを作成してアプリケーションを実行すると、すべて正常です。私は新しいものに私の古い本番データベースのダンプをアップロードし、パスワードをリセットしようとする。しかし、私はこのエラーが直面しています:未定義のメソッド `reset_password_sent_at Railsでアップグレードするとき4.2.6

NoMethodError (undefined method `reset_password_sent_at=' for

Did you mean? reset_password_token_was): activemodel (4.2.6) lib/active_model/attribute_methods.rb:433:in

method_missing' devise (4.2.0) lib/devise/models/recoverable.rb:87:in set_reset_password_token'
devise (4.2.0) lib/devise/models/recoverable.rb:45:in send_reset_password_instructions' devise (4.2.0) lib/devise/models/recoverable.rb:119:in send_reset_password_instructions' devise (4.2.0) app/controllers/devise/passwords_controller.rb:13:in create'
actionpack (4.2.6) lib/action_controller/metal/implicit_render.rb:4:in
send_action' actionpack (4.2.6) lib/abstract_controller/base.rb:198:in process_action' actionpack (4.2.6) lib/action_controller/metal/rendering.rb:10:in process_action' actionpack (4.2.6) lib/abstract_controller/callbacks.rb:20:in block in process_action'
activesupport (4.2.6) lib/active_support/callbacks.rb:117:in
call'
activesupport (4.2.6) lib/active_support/callbacks.rb:555:in block (2 levels) in compile' activesupport (4.2.6) lib/active_support/callbacks.rb:505:in call' activesupport (4.2.6) lib/active_support/callbacks.rb:92:in __run_callbacks__'
activesupport (4.2.6) lib/active_support/callbacks.rb:778:in
_run_process_action_callbacks' activesupport (4.2.6) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (4.2.6) lib/abstract_controller/callbacks.rb:19:in process_action'
actionpack (4.2.6) lib/action_controller/metal/rescue.rb:29:in process_action' actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:32:in block in process_action' activesupport (4.2.6) lib/active_support/notifications.rb:164:in block in instrument'
activesupport (4.2.6) lib/active_support/notifications/instrumenter.rb:20:in
instrument'
activesupport (4.2.6) lib/active_support/notifications.rb:164:in instrument' actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:30:in process_action' actionpack (4.2.6) lib/action_controller/metal/params_wrapper.rb:250:in process_action' activerecord (4.2.6) lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (4.2.6) lib/abstract_controller/base.rb:137:in process' actionview (4.2.6) lib/action_view/rendering.rb:30:in process' actionpack (4.2.6) lib/action_controller/metal.rb:196:in dispatch' actionpack (4.2.6) lib/action_controller/metal/rack_delegation.rb:13:in dispatch'
actionpack (4.2.6) lib/action_controller/metal.rb:237:in block in action' actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:74:in dispatch' actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:43:in serve'
actionpack (4.2.6) lib/action_dispatch/routing/mapper.rb:49:in
serve' actionpack (4.2.6) lib/action_dispatch/journey/router.rb:43:in block in serve' actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in each' actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in serve'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:817:in
call' warden (1.2.6) lib/warden/manager.rb:35:in block in call'
warden (1.2.6) lib/warden/manager.rb:34:in
catch' warden (1.2.6) lib/warden/manager.rb:34:in call' client_side_validations (4.2.5) lib/client_side_validations/middleware.rb:15:in call' rack (1.6.4) lib/rack/etag.rb:24:in call' rack (1.6.4) lib/rack/conditionalget.rb:38:in call' rack (1.6.4) lib/rack/head.rb:13:in call' remotipart (1.2.1) lib/remotipart/middleware.rb:27:in call' actionpack (4.2.6) lib/action_dispatch/middleware/params_parser.rb:27:in call'
actionpack (4.2.6) lib/action_dispatch/middleware/flash.rb:260:in
call' rack (1.6.4) lib/rack/session/abstract/id.rb:225:in context' rack (1.6.4) lib/rack/session/abstract/id.rb:220:in call'
actionpack (4.2.6) lib/action_dispatch/middleware/cookies.rb:560:in call' activerecord (4.2.6) lib/active_record/query_cache.rb:36:in call' activerecord (4.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in call' actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:29:in block in call'
activesupport (4.2.6) lib/active_support/callbacks.rb:88:in __run_callbacks__' activesupport (4.2.6) lib/active_support/callbacks.rb:778:in _run_call_callbacks'
activesupport (4.2.6) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:27:in call' actionpack (4.2.6) lib/action_dispatch/middleware/remote_ip.rb:78:in call'
actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:17:in
call'
actionpack (4.2.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in call'
railties (4.2.6) lib/rails/rack/logger.rb:38:in
call_app' railties (4.2.6) lib/rails/rack/logger.rb:20:in block in call' activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in block in tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:26:in tagged' activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in tagged' railties (4.2.6) lib/rails/rack/logger.rb:20:in call' actionpack (4.2.6) lib/action_dispatch/middleware/request_id.rb:21:in call' rack (1.6.4) lib/rack/methodoverride.rb:22:in call' rack (1.6.4) lib/rack/runtime.rb:18:in call' activesupport (4.2.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in call' rack (1.6.4) lib/rack/lock.rb:17:in call' actionpack (4.2.6) lib/action_dispatch/middleware/static.rb:120:in call' rack (1.6.4) lib/rack/sendfile.rb:113:in call' railties (4.2.6) lib/rails/engine.rb:518:in call' railties (4.2.6) lib/rails/application.rb:165:in call' rack (1.6.4) lib/rack/content_length.rb:15:in call' thin (1.5.1) lib/thin/connection.rb:81:in block in pre_process' thin (1.5.1) lib/thin/connection.rb:79:in catch' thin (1.5.1) lib/thin/connection.rb:79:in pre_process' thin (1.5.1) lib/thin/connection.rb:54:in process' thin (1.5.1) lib/thin/connection.rb:39:in receive_data' eventmachine (1.0.9.1) lib/eventmachine.rb:193:in run_machine' eventmachine (1.0.9.1) lib/eventmachine.rb:193:in run' thin (1.5.1) lib/thin/backends/base.rb:63:in start' thin (1.5.1) lib/thin/server.rb:159:in start' rack (1.6.4) lib/rack/handler/thin.rb:19:in run' rack (1.6.4) lib/rack/server.rb:286:in start' railties (4.2.6) lib/rails/commands/server.rb:80:in start' railties (4.2.6) lib/rails/commands/commands_tasks.rb:80:in block in server'
railties (4.2.6) lib/rails/commands/commands_tasks.rb:75:in tap'
railties (4.2.6) lib/rails/commands/commands_tasks.rb:75:in
server'
railties (4.2.6) lib/rails/commands/commands_tasks.rb:39:in run_command!' railties (4.2.6) lib/rails/commands.rb:17:in ' bin/rails:4:in require' bin/rails:4:in '

デシベル/移行/ xxxxxxxx_devise_create_users.rb:

class DeviseCreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table(:users) do |t| 
     t.string :email,    :null => false, :default => "" 
     t.string :encrypted_password, :null => false, :default => "" 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     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 

     ## Encryptable 
     # t.string :password_salt 

     ## Confirmable 
     t.string :confirmation_token 
     # t.datetime :confirmed_at 
     # t.datetime :confirmation_sent_at 
     # t.string :unconfirmed_email # Only if using reconfirmable 

     ## Lockable 
     # t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 

     # Token authenticatable 
     # t.string :authentication_token 

     ## Invitable 
     # t.string :invitation_token 

     t.timestamps 
    end 
    add_index :users, :email,    :unique => true 
    add_index :users, :confirmation_token, :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    end 

    def self.down 
    drop_table :users 
    end 
end 

旧移行ファイル:

class DeviseCreateUsers < ActiveRecord::Migration 
    def self.up 
    create_table(:users) do |t| 
     t.database_authenticatable :null => false 
     t.confirmable 
     t.recoverable 
     t.rememberable 
     t.trackable 
     # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both 

     t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    add_index :users, :confirmation_token, :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    # add_index :users, :unlock_token,   :unique => true 
    end 

    def self.down 
    drop_table :users 
    end 
end 

問題の解決方法を教えてください。

+0

バージョンの更新後に移行を実行しましたか?私には新しい列名のように見えます。したがって、データベースが古いバージョンの場合、使用可能な列がない可能性があります。 –

答えて

1

@Edmundリーポイントは1.5と、最新バージョンの違いがあり、正確です。 最も古いバージョンでreset_password_sent_atが見つからないため、エラーがスローされます。このために工夫側を変更する必要はありません、ただ追加しよう:

ALTER TABLE users ADD reset_password_sent_at datetime; 

スクリプトファイルと実行(簡単なトリック)に、あなたが/編集ユーザーを追加する場合も問題ありません。

+0

とても簡単な答え:) – user3189916

2

バージョン1.5付近で追加された新しい列です。

このリンクを確認してください。 https://github.com/plataformatec/devise/commit/7693173ecd7f9b4198fafabafa3bdced7fab16d3

古いバージョンのものであるため、データベースには新しい列がありません。移行を実行することができ、この特定の問題は修正する必要があります。しかし、あなたが3つの主要なバージョンを飛ばしているので、さらに大きな変化があるかもしれません。

Deviseはドキュメントで非常に良い仕事をしています。バージョンを更新する前に、壊れている変更を確認してください。 FYI https://github.com/plataformatec/devise/releases

それは(2.xにするなどの1.x)大きなアップデートに来るとき、私は個人的にジャンプのバージョンに対する助言、あなたは1.xからの4.xにジャンプしているに沿ってみましょう。セマンティックバージョニングで

  • 最後の桁は、通常はパッチです。最後の数字(たとえば、1.4.2から1.4.5)の からアップグレードする場合。
  • 2桁目が最初の桁は常にメジャーアップデートで、大きな変化を含む、 とあなたは非常にする必要があります
  • 彼らは 自分のバージョンを管理する方法に応じていくつかの 非推奨といくつかの重大な変更を導入かもしれないマイナーな変更であり、慎重に。

セマンティックバージョン管理の詳細。

http://semver.org/

+0

偉大な情報については、非常に便利です。 – user3189916

関連する問題