Время не властно над ActiveResource

31 октября 2008 12:18 | Ссылка | Комментарии (0)
НЕ-время ActiveRecord

С ещё одной проблемы связанной с ActiveResource начался сегодня день. Оказывается ActiveResource не поддерживает работу с часовыми поясами (временными зонами) т.е. значение которое находиться в config.time_zone не влияет на формат времени в полях класса ActiveResource. При этом REST-запросы возвращают дату с учётом часового пояса установленного на сервере, но судя по всему, при десериализации значение часового пояса теряется и возвращается дата в формате UTC.

* * *

Методы update_attribute и update_attributes в ActiveResource

31 октября 2008 10:56 | Ссылка | Комментарии (0)

Пока разработчики ActiveResource который месяц пытаются совладать с diff-файлами здесь и здесь и наложить патч который позволит использовать методы ActiveResource#update_attribute и ActiveResource#update_attributes можно воспользоваться немного переработанным мной патчем:

module ActiveResource
  class Base

    def update_attribute(name, value) 
      update_attributes(name => value)
    end

    def update_attributes(attributes)
      load(attributes) && save
    end

  end
end

который нужно положить в каталог <app-root>/config/initializers.

* * *

Чёрная магия ActiveResource

30 октября 2008 13:19 | Ссылка | Комментарии (0)
Чёрная магия ActiveRecord

Натолкнулся только что на одну неприятную особенность ActiveResource. Как известно ActiveResource позволяет прозрачно подменять ActiveRecord на клиенте и транслировать запросы отправленные ему на сервер при помощи REST где уже и происходит обращение к БД через ActiveRecord. Такое поведение накладывает ряд ограничений на ActiveResource и заставляет его, в некоторых случаях, вести себя иначе чем ActiveRecord.

* * *

Несколько строк о потерянном времени или небольшое исследование inputEx

29 октября 2008 18:34 | Ссылка | Комментарии (0)
inputEx

Провел сегодня пол дня пытаясь собрать на базе inputEx небольшой прототип для построения форм. Но в итоге бросил эту затею. Хоть идея этого фреймворка и великолепная, но её реализация пока безумно сырая. Например не удалось заставить полностью востанавливать состояние формы в дизайнере из сгенерированного JSON запроса (сами поля востанавливаются нормально, а вот метка к ним остаётся пустой). К тому же последний релиз сделанный в мае наводит на печальные мысли (хотя в SVN жизь вроде как ещё теплиться).

* * *

Получаем exit code в net-ssh

26 октября 2008 21:23 | Ссылка | Комментарии (0)
Exit Code in net-ssh

Получение кода завершения команды в net-ssh задача не сложная, но с первого взгляда интуитивно не очевидная (т.к. методы которые выполняют команду не возвращают его, так же нет свойств через которое этот код был бы доступен). Чтобы всё таки получить код завершения команды надо опуститься на уровень ниже.

Для этого потребуется открыть канал и выполнить команду в контексте этого канала и уже после этого из канала можно извлечь информацию о коде завершения. Выглядит это вот так:

Net::SSH.start("host", "login", :password => "password") do | ssh |
  ssh.open_channel do | ch |
    ch.exec("[ -d #{directory} ]") do | ch, success |
      ch.on_request("exit-status") do | ch, data |
        exit_code = data.read_long
      end
    end
  end
end
* * *

Do you want Firefox to remember this password?

25 октября 2008 15:29 | Ссылка | Комментарии (0)
Password

Оказывается чтобы убрать сообщение в котором Firefox предлагает сохранить логин и пароль (а нужно это например на форме создания нового пользователя) совсем не нужно лезть в настройки Firefox и что-то менять в менеджере паролей. Достаточно просто в поле где выводиться пароль добавить атрибут autocomplete=”off”. После этого нехитрого действия сообщение “Do you want Firefox to remember this password?” перестанет появляться после сабмита формы на сервер.

* * *

Формат JSON для GridPanel из ExtJS

23 октября 2008 15:17 | Ссылка | Комментарии (0)
JSON огенные-заклинания

Решил тут покапаться в ExtJS т.к. давно уже хотел это сделать, и вот теперь посвились время, желание и возможность. И с наскоку наступил на грабли, которые отняли у меня порядочно времени, но решение оказалось безумно простым.

Оказывается в Rails 2.1 немного изменился формат JSON. По умолчанию, для каждой записи добавляется идентификатор указывающий на класс объекта который был сериализован в эту запись. Пример:

...
[{"site": {"name": "Hi-Tech Melancholia",  "id": 1}},
 {"site": {"name": "RSDN", "id": 2}}]
...

Видите ключ “site”? Если он присутствует, то класс Ext.data.JsonStore не может правильно распознать JSON и, например, как следствие этого, GridPanel, который его использует не выводит данные.

Но, потратив немало врмени, я нашел решение. В файле config/initializers/new_rails_defaults.rb есть параметр ActiveRecord::Base.include_root_in_json который будучи установленный в false, убирает идентификатор класса из JSON получая такой вот результат:

...
[{"name": "Hi-Tech Melancholia",  "id": 1},
 {"name": "RSDN", "id": 2}]
...

Я не стал приводить весь код JSON-ответов т.к. они довольно длинные. Плюс они немного отличаются от тех JSON-ответов что формирует стандартный метод to_json т.к. я использую плагин ext_scaffold.

* * *

Полезные задачи для Capistrano (работаем с конфигами nginx сервера)

21 октября 2008 18:28 | Ссылка | Комментарии (0)
[ Нет описания ]

В предыдущем посте я рассказал про то, как запускать, останавливать и перезапускать nginx используя Capistrano. Попробуем сделать с nginx-сервером что-нибудь посложнее.

Не знаю как вам, но мне больше всего нравиться редактировать какие-либо файлы (в особенности конфигурационные) на локальной машине, а не в маленьком окне терминала с открытым в нём vi :) Вот для этих целей я и написал пару задач которые позволяют решить эту небольшую проблему.

* * *

Полезные задачи для Capistrano (управляем nginx сервером)

20 октября 2008 14:03 | Ссылка | Комментарии (2)
Вкл. / Выкл.

Конечно каждый из вас слышал о потрясающем веб-сервере под названием nginx, который создал наш Российский разработчик Игорь Сысоев. К достоинствам nginx-сервера можно отнести: высокую скорость работы, надёжность, удобство настройки и огромное количество разнообразных плагинов.

В Capistrano есть стандартные задачи которые позволяют управлять кластером из Mongrel-серверов на которых работает ваше Ruby on Rails приложение, а вот для управления nginx-сервером задач пока нет, поэтому я попробую восполнить этот пробел.

* * *

Создание sitemap.xml для ленивых Ruby on Rails программистов

19 октября 2008 00:01 | Ссылка | Комментарии (0)
Кусочки мозайки

В одном из своих прошлых постов я рассказал как можно создать sitemap.xml файл в Ruby on Rails не прибегая к использованию сторонних плагинов. Те кто прочитал этот пост наверное заметили что для того чтобы добиться результата пришлось совершить немало телодвижений. Сейчас же я расскажу про способ который сведёт все ваши усилия по созданию sitemap.xml к минимуму.

* * *