| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby: Общие вопросы > xml-rpc с граблями и trac |
| Автор: bilbobagginz 22.8.2010, 13:38 | ||||
| привет. ситуация такова (все в интeрнете), есть
задача: автоматизировать эту процедуру, тем самым экономить эти минуты на билд. в день может быть несколько. присмотрелся на XML-RPC. разбил на под-задачи, т.е. из руби скрипта:
1. накопал trac4r. 2. понял, что стандартный xmlrpc клиент не поддерживает работу с SSL+certificates 3. понял что проблема в конфигурации объекта. создал патчи (приатачил) для xmlrpc/client.rb, и для trac4r/lib/query.rb, trac4r/trac4r.rb Прошел легко пункты 1, 2. на третьем завис. код клиента подключения (опустил данные аутентификации) тут:
Получил:
я не совсем понимаю где я устанавливаю (и я ли) это content-type. помогите старому хоббиту пинком в нужное направление. |
| Автор: source777 22.8.2010, 16:45 | ||||
В XMLRPC::Client#do_rpc есть проверка следующего вида:
А Trac по ходу дела возвращает данные с Content-Type = application/xml Так что придётся тебе через class_eval переопределить вышеуказанный метод, чтобы он application/xml тоже переваривал. P.S. А вообще совет на будущее, как искать причину исключения: 1) Смотришь что находится по указанному адресу: /usr/lib/ruby/gems/1.8/gems/trac4r-1.2.3/lib/trac4r/query.rb:60:in `query' А там глобальный перехват исключений:
2) Оставляешь только return @connection.call(command,*args) и сразу видишь где на самом деле произошла ошибка. Хоть и не комильфо, но зато помогает, когда некоторые умельцы stack trace прячут. |
| Автор: source777 22.8.2010, 23:02 | ||||
вероятно, потому что она входит в стандартную библиотеку Ruby
Спроси что полегче... В стандартную библиотеку вообще входит достаточно много отстойных классов, взять тот же Net::HTTP или REXML. Почему так получилось хз, видимо исторически сложилось... Благо отказаться от использования этих классов ничего не стоит, т.к. есть масса достойных альтернатив. Что ты подразумеваешь под "расширить"? |
| Автор: bilbobagginz 23.8.2010, 08:55 |
я о реализации: когда вижу какой-то eval у меня ушки на макушке, т.к. стараюсь им пользоваться редко и с богобоязнью. если на настоящий момент единственный контент, поддерживаемый trac4r - "text/xml", то надеюсь можно сделать и без eval-oв. как начинающий, для мя метапрограммирование пока тонкое искусство... акромя того, это как добавить в только свои instances какую-то методу, а другим - не дам. жадно я как-раз за то, чтобы мои добавки кода проревизили и влили в стабильную ветку. и мне хорошо, и людям. авось откликнется. |
| Автор: source777 23.8.2010, 12:55 | ||
Это хороший подход, но в данном случае придётся ждать Ruby 1.9.3, чтобы насладиться твоим патчем, если его примут. Или ты trac4r решил на другой XML-RPC клиент перевести? В общем я запутался, что ты собрался делать... |
| Автор: bilbobagginz 23.8.2010, 20:41 | ||
| khm... проблема оказалась меж клавиатурой и стулом. сервер накрывался, если получал некорректно упакованные данные. нужно было посылать в функцию putAttachmentEx объект типа XMLRPC::Base64. его создание было тупо:
меня вдуплила инструкция, в которой написано было "конвертировать в Base64", и я принял его как кодировку, а не тип объекта. в общем разобрался! теперь мой хадсон шлет билды на вику трэка, и оповещает о них по джабберу/почте к делу относящихся. |
| Автор: source777 23.8.2010, 22:59 |
| Ну что ж, поздравляю. Оказывается надо было просто заглянуть в логи Trac'a |
| Автор: bilbobagginz 23.8.2010, 23:24 |
пообщался по irc, там один питонец меня направил, сказав, что видимо я не загрузил в правильную структуру на клиенте. все доработал скрипт работает как часы, табличку со ссылками заполняет. прикольно надо кинуть куда-то скрипт на github |
| Автор: source777 24.8.2010, 14:38 |
http://gist.github.com/ |