28 ноября 2012 г.

Оффтоп: Ретронаут

Завожу рубрику "Оффтоп", в ней я буду выкладывать информацию об интересных рессурсах найденных мною в сети.

Для начала поделюсь всего одной, но очень классной ссылкой: http://www.retronaut.com/ - "исследуй любое время"
Это необычный сайт, где публикуются фотографии и подписи к ним за последние несколько веков в том порядке в котором их добавляют на сайт. Раздел самых старых фотографий маркируется так: "1700s-0000",также присутствует деление по категориям: "Музыка", "Люди" и пр.

14 октября 2012 г.

Разворачивание RubyOnRails 3 + PostgreSql приложения с github на хостинге Locum.ru

Один мой знакомый системный администратор предложил попробовать хостинг locum.ru ссылаясь на крайне приятное впечатление о данном сервисе. Сразу оговорюсь что данный пост не является рекламой: при первом знакомстве возникли некоторые моменты, которые мягко говоря смутили меня и о них хочется рассказать подробнее, так как необходимой информации я не нашел ни в официальном блоге, ни в рунете.

Здесь я пошагово расскажу как развернуть ваше приложение на тарифе "Плекс" или аналогичном ("Прайм" и "Оптима" - тарифы поддерживающие RubyOnRails-проекты на момент написания статьи). Будет рассмотрено подключение по ssh, особенности работы с rails-приложением через командную строку на сервере данного хостинга и описан процесс клонирования git-проекта.

4 октября 2012 г.

Парсинг ресурсов с Nokogiri в приложении Ruby on rails

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

Итак, в этой статье я расскажу как легко и быстро парсить информацию с онлайн ресурсов для последующей работы с ней в ваших RubyOnRails приложениях. В этом нам поможет замечательный гем Nokogiri - это HTML, XML, SAX , и RSS парсер. Среди прочих фишек Nokogiri имеется возможность доступа к элементам по XPath и CSS3-селекторам. Это означает что вы можете использовать Nokogiri не только для парсинга веб-ресурсов, но и для разбора xml-файлов самых разных видов.


3 марта 2012 г.

Форма с чекбоксами и multiple select для модели с has_many связями на Rails 3

текст основан на вольном переводе статьи из блога Bucky Bits с авторскими дополнениями

В разработке сайтов довольно часто встречаются ситуации, когда к одной модели необходимо иметь возможность добавить одну или более опций из отдельного списка.

@товар может иметь много @категорий, а @магазин иметь отделения в разных @городах, при этом и @категории и @города являются отдельными ресурсами с чёткой и востребованной структурой - т.е. мы выбираем связи из предложенных вариантов.

Если список выбора не слишком богат, то велик соблазн применить в визуальном решении для формы основной модели чекбоксы, каждый из которых будет отдельным кейсом из списка вариантов, или multiple select для более крупных списков. Давайте посмотрим как это делается.

2 марта 2012 г.

Цинизм в IT: upstream sent too big header while reading response...

Цинизм в IT: upstream sent too big header while reading respons...
Исправляется добавлением двух последних строк в конфиг Nginx:


    http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    proxy_buffers 8 16k;
    proxy_buffer_size 32k;
...

19 февраля 2012 г.

Настройка конфигурации сервера Nginx для разработки на хостингн Amazon EC2

перевод с официального сайта http://http://nginx.org

В качестве независимого поставщика решений, в рамках программы AWS Solution Providers, Nginx предлагает автоматизированный скрипт установки сервера для использования на образах AWS EC2. Этот всмпомогательный сценарий ориентирован на разработчиков, которые только начали использовать Nginx и EC2, и хотели бы иметь быструю и эффективную среду. Пожалуйста, проделайте описанные в списке действия для того, чтобы подготовить свою виртуальную машину и настроить корректную конфигурацию Nginx.

Для настройки среды разработки:


  • Используйте руководство Get Started with EC2 чтобы зарегестрироваться на AWS (Amazon Web Services) и запустить свой EC2 образ (Spot request или Instance). Наш сценарий поддерживает только “Basic 32-bit Amazon Linux AMI” или “Basic 64-bit Amazon Linux AMI” образы, поэтому выберите один из них. При настройке правил брандмауэра (Security groups), необходимо добавить правило, чтобы принимать веб-трафик на 80 порту:
    80 (HTTP) 0.0.0.0/0
    
  • Как только сущность будет запущена войдите на нее используя ssh доступ и скачайте баш-скрипт aws_nginx_setup.sh с помощью следующей команды:
    wget http://nginx.org/download/aws_nginx_setup.sh
    
    затем запустите скрипт с правами суперпользователя:
    sudo sh ./aws_nginx_setup.sh
    
  • Вам будут предложены различные варианты установки. Возможно выбрать Django, Pyramid, Ruby on Rails или PHP среды разработки. После выбора необходимых компонентов, скрипт автоматически подготовит конфигурацию для работы с Nginx. Будет создан отдельный пользователь, а затем пример web-приложения будет запущен, для демонстрации корректной работы.
  • После завершения установки директорией для приложений будет являться папка /var/www, скрипт сообщит как запускать/останавливать пример приложения. Например Rails приложение будет находиться в /var/www/rails, а специфичные настройки Rails в конфигурации nginx будут находиться в /etc/nginx/conf.d/rails.conf. Установленные приложения и конфигурация могут быть использованы в качестве основы для дальнейшего развития.

От PHP к Ruby (Сходства и различия)

перевод с официального сайта http://www.ruby-lang.org

PHP широко используется для разработки web-приложений, однако если вы собираетесь попробовать Ruby on Rails или хотите писать на языке предназначенном для общего использования, то Ruby это то что вам нужно.

Сходства
  • Ruby как и PHP имеется механизм динамической типизации данных. Вы можете определять перменные непосредственно во время выполнения сценария.
  • Имеются классы, и вы можете контролировать доступ к ним, идентично PHP 5 присутсвуют public, private и protected уровни доступа.
  • Некоторые переменные также начинаются с $, как в PHP (но не все)
  • В Ruby присутсвует eval функция.
  • Вы также может использовать строчную интерполяцию. ”$foo is a $bar” вы можете написать как ”#{foo} is a #{bar}” — как и в PHP, это не распространяется на одиночные кавычки.
  • Идентичный heredoc механизм и синтаксис.
  • В Ruby есть исключения (exceptions -> raise или fail), как в PHP 5
  • Также имеется огромная библиотека стандартных механизмов.
  • Массивы (array) и хэш-массивы (hashes) устроены подобным образом, если вы замените конструкцию array() на { и }, то PHP array('a' => 'b') превратится Ruby {'a' => 'b'}.
  • true и false устроены аналогично PHP, но null обозначается nil

Различия
  • В Ruby строгая типизация данных. Вы должны использовать методы .to_s, .to_i и т. д. для конвертации строк, чисел и т.д. вместо того чтобы оставлять эту работу языку.
  • Строки, числа, массивы, хэш-массивы и все остальные сущности в Ruby являются объектами.
  • Скобки не являются обязательными при вызове метода, кроме тех случчаев когда нееобходимо передать параметры в тело метода
  • Вместо соблюдения оговоренного пространства имён например таких как подчеркивания (Underscores) или camelCase, стандартные библиотеки и расширения оформлены в классы и модули.
  • Reflection изначально имеется в объектах, вам не нужно подключать Reflection классы как в PHP 5
  • Переменные Ruby передаются по ссылкам. Присваивая переменной объект вы ссылаетесь на него, а не получаете копию.
  • В Ruby нет абстрактных классов (abstract classes) или интерфейсов (interfaces)
  • Хэш-массивы (hashes) и массивы (arrays) не являются взаимозаменяемыми
  • Только false и nil являются false, а вот 0, array() и пустая строка "" в теле условия определяются как true.
  • Практически все действия являются вызовом того или иного метода, даже raise (throw в PHP).