2010-08-27 4 views
2

Je suis fatigué de poser des questions sans réponse lors de l'utilisation de nombreux plugins/gemmes obsolètes, et parfois ils ne fonctionnent pas vraiment comme je le voulais vraiment.Comment être un programmeur Ruby indépendant

Ma question est simple:

Si j'étais un programmeur PHP et Rails a été mon premier cadre, que dois-je apprendre ensuite je peux compter sur moi-même lorsque l'on travaille avec des plugins gênants ou des extraits de code ou des tutoriels? J'avais l'habitude d'être assez bon avec un système de commerce électronique (plutôt stupide maintenant que je connais MVC) en PHP, et normalement je vais juste aller de l'avant et lire le code du plugin pour savoir ce qu'il fait, mais apparemment faire cela est extrêmement difficile dans Ruby on Rails, devrais-je continuer à le faire, ou suis-je sur la bonne voie? (J'ai appris en passant, mais à un rythme très lent par rapport à quand j'utilisais encore PHP et ce "framework e-commerce")

Répondre

2

Cela ressemble à une question de programmation générique pour moi. Si vous avez des problèmes avec certains plugins Rails, vous pouvez toujours déboguer son code avec un tas de méthodes simples ou hardcore, essayez de comprendre et de corriger l'erreur. La question est, quelles méthodes devez-vous utiliser dans des situations particulières.

Je vais vous donner un petit exemple. Lorsque vous déboguez votre application Rails, vérifiez toujours logs/production.log ou logs/development.log (en fonction du mode que vous utilisez) pour les erreurs de toutes sortes. Chaque erreur dans Ruby/Rails est représentée par une énorme pile-trace que vous devriez lire de haut en bas. Comme celui-ci:

Processing CommentsController#create (for ***.***.***.171 at 2010-08-27 03:31:29) [POST] 
    Parameters: {"authenticity_token"=>"[STRIPPED]"}, "last_comment_id"=>"0", "original_controller"=>"projects", "thread"=>"true", "thread_id"=>"Conversation_31", "commit"=>"Save", "_"=>"", "controller"=>"comments", "action"=>"create", "conversation_id"=>"31"} 
Sent mail to [email protected] 

ArgumentError (invalid byte sequence in UTF-8): 
    /usr/lib/ruby/1.9.1/net/protocol.rb:294:in `slice!' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:294:in `each_crlf_line' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:236:in `write_message_0' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:250:in `block (2 levels) in write_message' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:280:in `using_each_crlf_line' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:250:in `block in write_message' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:169:in `writing' 
    /usr/lib/ruby/1.9.1/net/protocol.rb:249:in `write_message' 
    /usr/lib/ruby/1.9.1/net/smtp.rb:878:in `block in data' 
    /usr/lib/ruby/1.9.1/net/smtp.rb:921:in `critical' 
    /usr/lib/ruby/1.9.1/net/smtp.rb:875:in `data' 
    /usr/lib/ruby/1.9.1/net/smtp.rb:655:in `send_message' 
    actionmailer (2.3.8) lib/action_mailer/base.rb:684:in `block in perform_delivery_smtp' 
    /usr/lib/ruby/1.9.1/net/smtp.rb:526:in `start' 
    actionmailer (2.3.8) lib/action_mailer/base.rb:682:in `perform_delivery_smtp' 
    actionmailer (2.3.8) lib/action_mailer/base.rb:523:in `deliver!' 
    actionmailer (2.3.8) lib/action_mailer/base.rb:395:in `method_missing' 
    app/models/emailer.rb:89:in `send_with_language' 
    app/models/conversation.rb:51:in `block in notify_new_comment' 
    app/models/conversation.rb:47:in `each' 
    app/models/conversation.rb:47:in `notify_new_comment' 
    ... 

Nous y sommes! La ligne ArgumentError (invalid byte sequence in UTF-8):, tout en haut de cette trace, nous indique toujours le type d'erreur. C'est une erreur d'argument!

Ensuite, regardez la ligne suivante: /usr/lib/ruby/1.9.1/net/protocol.rb:294:in 'slice!'. Il indique où l'exception (ArgumentError) a été soulevée dans le format suivant:

/path/to/file/:line:in `method_name'` 

Ouvrons ce fichier négligents et trouver la source autour de cette ligne:

def each_crlf_line(src) 
    buffer_filling(@wbuf, src) do 
     while line = @wbuf.slice!(/\A.*(?:\n|\r\n|\r(?!\z))/n) 
      yield line.chomp("\n") + "\r\n" 
     end 
    end 
end 

L'erreur est sur la ligne suivante:

while line = @wbuf.slice!(/\A.*(?:\n|\r\n|\r(?!\z))/n) 

de ce point nous savons où l'erreur est et seulement besoin de le corriger, mais ce processus est hors de portée de mon histoire courte. Je voulais juste vous montrer comment travailler avec des erreurs dans Rails.

+0

Merci pour votre effort incroyable pour répondre à cette question, j'en ai beaucoup appris. Cependant, je veux que plus de gens répondent, afin que je puisse apprendre encore plus d'aspects de la programmation de RoR. Donc, si vous me le permettez, j'aimerais que ma réponse soit acceptée. Il y a d'autres questions concernant le débogage que je viens de poster, je serais assez humble pour avoir d'autres bonnes réponses de votre part: voir http://stackoverflow.com/questions/3586386/how-to-debug-a-plugin-or-gem -using-ruby-debug-gem-où-la-partie-je-voulais-à-deb et http: // stackoverflow.com/questions/3585985/how-to-debug-a-plugin-gem Merci encore! – jaycode

1

Vous devriez continuer à lire le code du plugin.

Si c'est extrêmement dur, vous pouvez devenir extrêmement bon.

0

Regardez la vidéo Yehuda Katz sur la page d'accueil de railsconf.blip.tv. Il est maintenant l'un des principaux développeurs de rails et explique comment il s'y est pris.

Questions connexes