Как стать независимым программистом на Ruby - PullRequest
2 голосов
/ 27 августа 2010

Я устал задавать вопросы без ответа при использовании многих устаревших плагинов / гемов, и иногда они действительно не работают так, как я хотел.

Поэтому мой вопрос прост:

ЕслиЯ был программистом на PHP, и Rails был моим первым фреймворком, что мне нужно учить дальше, чтобы я мог зависеть от себя при работе с проблемными плагинами, фрагментами кода или учебными пособиями?(довольно глупая теперь, когда я знаю MVC) система электронной коммерции в PHP, и обычно я просто захожу вперед и зачитываю код плагина, чтобы выяснить, что он делает, но, очевидно, делать это крайне сложно в Ruby on Rails, еслиЯ продолжаю делать это, или я иду по правильному пути?(Я, кстати, учился, но в очень медленном темпе по сравнению с тем, когда я все еще использовал PHP и эту «среду электронной коммерции»)

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Для меня это общий вопрос программирования.Если у вас есть какие-либо проблемы с каким-либо плагином Rails, вы всегда можете отладить его код с помощью нескольких хардкорных или простых методов, попытаться понять и исправить ошибку.Вопрос в том, какие методы вы должны использовать в определенных ситуациях.

Я приведу небольшой пример.Когда вы отлаживаете свое Rails-приложение, всегда проверяйте либо logs/production.log, либо logs/development.log (в зависимости от того, в каком режиме вы работаете) на наличие ошибок любого рода.Каждая ошибка в Ruby / Rails представлена ​​огромной трассировкой стека, которую вы должны прочитать сверху вниз.Вот так:

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@email.com

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'
  ...

Вот и мы!Строка ArgumentError (invalid byte sequence in UTF-8): в самом верху этой трассы всегда сообщает нам тип ошибки.Это ошибка аргумента!

После этого посмотрите следующую строку: /usr/lib/ruby/1.9.1/net/protocol.rb:294:in 'slice!'.Он сообщает, где возникла исключительная ситуация (ArgumentError) в следующем формате:

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

Давайте откроем этот небрежный файл и найдем источник вокруг этой строки:

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

Ошибканаходится в следующей строке:

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

С этого момента мы знаем, где находится ошибка, и нужно только ее исправить, но этот процесс выходит за рамки моего короткого рассказа.Я просто хотел показать вам, как работать с ошибками в Rails.

1 голос
/ 27 августа 2010

Вы должны продолжать читать код плагина.

Если это очень сложно, вы можете стать очень хорошим в этом.

0 голосов
/ 27 августа 2010

Посмотрите видео Yehuda Katz на главной странице railsconf.blip.tv . В настоящее время он является одним из разработчиков основных рельсов и обсуждает, как он в него попал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...