2012-08-23 20 views
8

Mi sto imbattendo in qualcosa di strano qui. Ho un "autenticatore" che si affida a ND5 per hash una determinata stringa che corrisponde come password. Il problema quando ho eseguito il mio test è questo:Digest :: MD5 in Ruby 1.9.3

NoMethodError: undefined method `md5' for #<CASServer::Authenticators::Billing:0x007fd8e6c906a0> 
./models/authenticators/billing.rb:63:in `validate' 
./routes/login.rb:166:in `block (2 levels) in <class:Server>' 
./routes/login.rb:158:in `each' 
./routes/login.rb:158:in `block in <class:Server>' 
(eval):2:in `click_button' 
./features/step_definitions/when_steps.rb:32:in `/^I enter "(.*)" as username and the generated username password and log in$/' 
./features/rubycas.login.feature:14:in `When I enter "username" as username and the generated username password and log in' 

Quindi, in pratica non riconosce la MD5 come parte della libreria Digest. Questo problema si verifica quando si esegue il test nell'IDE, così come nella console IRB:

1.9.3-p125 :001 > require "digest/md5" and Digest::MD5("test") 
NoMethodError: undefined method `MD5' for Digest:Module 

Tuttavia, quando ho eseguito il seguente:

[[email protected] /home/morn/rubycas/current]# ruby 
require "digest/md5" and Digest::MD5("test") 

ricevo errori, discariche o eccezioni . Ruby lo accetta e basta. Cosa mi manca per far funzionare questo MD5?

risposta

33

Digest :: MD5 non è un metodo ma un modulo. Prova

Digest::MD5.digest("test") 
+0

grazie, ha lavorato ...... io sono come un idiota per non vedere questo: S –

+1

Può fornire un link alla documentazione del metodo, per favore? – Kostas

+18

Digest :: MD5.hexdigest è anche abbastanza buono – reconbot

0

Ho trovato confuso, non sembra che .digest sia corretto. Non posso dire che sia sbagliato ...

Commenter @reconbot ha capito bene, IMO, ma ho visto il commento solo dopo essere tornato per migliorare questo QA, penso che un commento non sia abbastanza visibile.

http://ruby-doc.org/stdlib-2.4.0/libdoc/digest/rdoc/Digest/MD5.html

seguito è riportato un esempio di utilizzo per md5 hasing per l'utilizzo gibbone, la gemma MailChimp.

md5_hashed_email_address = Digest::MD5.hexdigest("[email protected]") 
Problemi correlati