2009-07-31 4 views
3

je reçois une erreur étrange sur ma production installer quand j'essayer de créer un nouvel utilisateur en utilisant AL:Crypted_password est nulle lorsque vous utilisez Authlogic pour enregistrer un utilisateur

ActiveRecord :: StatementInvalid: Mysql :: Erreur: Colonne 'crypted_password' ne peut pas être nul: INSERT INTO users

particulièrement étrange b/c cela fonctionne comme prévu sur ma boîte locale.

RAnning Rails 2.3.2 et rubis 1.8.7 sur les deux boîtes.

user.rb: 
class User < ActiveRecord::Base 
before_create :set_username 
    acts_as_authentic do |c| 
    c.require_password_confirmation = false 
    c.login_field = "email" 
    c.validates_length_of_password_field_options = {:minimum => 4} 
    c.validate_login_field = false #don't validate email field with additional validations 
    end 
end 

est ici la sortie de ma console de production:

>> u = User.new 
=> #<User id: nil, username: nil, email: nil, crypted_password: nil, 
    password_salt: nil, persistence_token: nil, single_access_token: nil, 
    perishable_token: nil, login_count: 0, failed_login_count: 0, 
    last_request_at: nil, current_login_at: nil, last_login_at: nil, 
    current_login_ip: nil, last_login_ip: nil, created_at: nil, 
    updated_at: nil, is_admin: 0, first_name: nil, last_name: nil> 

>> u.full_name = 'john smith' 
=> "john smith" 
>> u.password = 'test' 
=> "test" 
>> u.email = '[email protected]' 

=> "[email protected]" 
>> u.valid? 
=> true 
>> u.save 

ActiveRecord::StatementInvalid: Mysql::Error: Column 
'crypted_password' cannot be null: INSERT INTO `users` 
(`single_access_token`, `last_request_at`, `created_at`, 
`crypted_password`, `perishable_token`, `updated_at`, `username`, 
`failed_login_count`, `current_login_ip`, `password_salt`, 
`current_login_at`, `is_admin`, `persistence_token`, `login_count`, 
`last_name`, `last_login_ip`, `last_login_at`, `email`, `first_name`) 
VALUES('B-XSXwhO7hkbtISIOyEq', NULL, '2009-07-31 01:10:44', NULL, 
'FK3mYS2Tp5Tzeq5IXE1z', '2009-07-31 01:10:44', 'john', 0, NULL, NULL, 
NULL, 0, 
'2c76b645f761eb3509353290e93874cecdb68a63caa165812ab1b126d63660757090ecf69995caef9e78f93d070b524e2542b3fec4ee050726088c2a9fdb0c9f', 
0, 'smith', NULL, NULL, '[email protected]', 'john') 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/abstract_adapter.rb:212:in `log' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/mysql_adapter.rb:320:in `execute' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/abstract/database_statements.rb: 
259:in `insert_sql' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/mysql_adapter.rb:330:in `insert_sql' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/abstract/database_statements.rb: 
44:in `insert_without_query_dirty' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/abstract/query_cache.rb:18:in 
`insert' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/base.rb:2902:in `create_without_timestamps' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/timestamp.rb:29:in `create_without_callbacks' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/callbacks.rb:266:in `create' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/base.rb:2868:in `create_or_update_without_callbacks' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/callbacks.rb:250:in `create_or_update' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/base.rb:2539:in `save_without_validation' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/validations.rb:1009:in `save_without_dirty' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/dirty.rb:79:in `save_without_transactions' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:229:in `send' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:229:in 
`with_transaction_returning_status' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/connection_adapters/abstract/database_statements.rb: 
136:in `transaction' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:182:in `transaction' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:228:in 
`with_transaction_returning_status' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:196:in `save' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:208:in `rollback_active_record_state!' 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/ 
active_record/transactions.rb:196:in `save' 

Aucune idée pourquoi cela se passe, et surtout pourquoi il enregistre un nouvel utilisateur sur dev, mais pas sur la production. Toute aide est beaucoup apprécié, merci!

edit: en utilisant Apache & passagers 2.2.4

Répondre

0

Avez-vous d'avoir installé les mêmes versions de gemme de authlogic installés dans votre production/système de développement?

+0

oui, authlogic (2.1.1) dans les deux. – kareem

8

mélanges acts_as_authentic dans le mot de passe et mot de passe = méthodes. La méthode password = prend votre mot de passe en clair, le salit et le crypte.

Peut-être avez-vous redéfini la méthode password = dans votre modèle utilisateur, comme avec attr_accessor: password?

+0

Excellent. J'ai rencontré exactement ce problème lors du passage d'un ancien système d'authentification à authlogic. Il y avait un attr_accessor: mot de passe se cachant dans mon modèle d'utilisateur. – jdl

4

Authlogic remplit crypted_password et password_salt avec null quand vous écraserez accesseurs comme celui-ci

attr_accessor: mot de passe: password_confirmation

Ces params devraient être attr_accessible seulement

0

Ajouter à votre ClassMapping

ClassMappings.register (

:methods => ["password"] 

) 
Questions connexes