Блог Леонида Лукина, страница 11

  • Ruby on Rails
    Работа с почтой на development сервере

    Нашел один из лучших способов работать с исходящими письмами на development-сервере - гем от Райана Бейтса letter_opener. Все очень просто - записываем в Gemfile проекта:

    gem "letter_opener", :group => :development

    А затем после запуска Bundler'а для реальной установки гема в config/environments/development.rb дописываем строку:

    config.action_mailer.delivery_method = :letter_opener

    Теперь при отправке почтового сообщения на продакшен Rails открывают новое окно браузера, где и отображается исходящее письмо!

    Опубликовано: 18.07.2012Категория: Ruby on RailsКомментарии: 0
  • Ruby on Rails
    Проблема сортировки в Postgresql в кодировке UTF-8 на Маке

    При использовании Postgresql в кодировке UTF-8 на Mac OS X все сталкиваются с проблемой сортировки текстовых полей. Причина устанавливается так:

    $ ls -l /usr/share/locale/ru_RU.UTF-8/LC_COLLATE
    LC_COLLATE -> ../la_LN.US-ASCII/LC_COLLATE

    А потому и правильная установка локали в ru_RU.UTF-8 не помогает!

    Решение проблемы - создание базы с установкой локали lc_collate='C':

    create database <имяприложения>_development with lc_collate='C' template=template0 owner <имяпользователя>;

    Опубликовано: 16.07.2012Категория: Ruby on RailsКомментарии: 0
  • Ruby on Rails
    Inflections - словоизменения в Rails

    Ruby ob Rails имеет специальный класс Inflector, который предназначен для автоматического изменения правописания слов в контексте их применения. Речь идет, к примеру, об изменении названия класса, скажем City, для именования таблицы в базе во множественном числе - cities. В большинстве случаев этот класс работает потрясающе грамотно, зная много правильных вариантов приведения, как то person => people, но в некоторых ситуациях может давать сбой, в частности при использовании в названиях неанглийских слов (латинских, немецких, русские названия, написанные транслитом). В любом случае, если есть подозрение на то, что выбранное вами для модели название может быть неправильно переведено рельсами во множественное число - всегда можно сначать проверить работу класса Inflector при помощи консоли:

    ActiveSupport::Inflector.pluralize "virus"

    или еще проще (так как Inflector можно использовать сразу же с любыми строками):

    "virus".pluralize

    Кстати, результатом предыдущих операций будет множественное число от virus, а это слово viri. Что есть грамматически правильный перевод, но все же более распространненый в быту вариант есть viruses.

    Так вот - если класс Inflection работает по любой причине не так, как вы хотите - открываем файл config/initializers/inflections.rb, раскомментируте шаблон, который вы там увидите и внесите свои правки:

    ActiveSupport::Inflector.inflections do |inflect|
      #   inflect.plural /^(ox)$/i, '\1en'
      #   inflect.singular /^(ox)en/i, '\1'
      #   inflect.irregular 'person', 'people'
      #   inflect.uncountable %25w( fish sheep )
      inflect.irregular 'virus', 'viruses'
    end

    И главное - обязательно нужно будет перезапустить сервер или консоль после внесения изменений в данный файл!

    Опубликовано: 11.07.2012Категория: Ruby on RailsКомментарии: 0
  • Ruby on Rails
    И еще одна шпаргалка по Bundler в Rails 3

    Bundler в Rails - это основной механизм отслеживания и управления зависимостями в загружаемых приложениями gem'ах. При этом сам Bundler - это тоже gem, но он не требует явной установки в Rails 3, так как сам является gem'ом от которого зависит Rails 3 версии.

    Gemfile приложения - манифест файл, находящийся в корне Rails приложения, в котором и перечислены все необходимые для приложения gem'ы, которые по умолчанию не входят в сами Рельсы. Если в приложении нам нужен еще один gem, то мы просто указываем это в нашем Gemfile'е. Именно с этим файлом в первую очередь и работает Bundler для того, чтобы понять какие gem'ы нужны приложению и от каких gem'ов зависят сами подключаемые gem'ы. Запуск работы Bundler'а происходит так:

    $ bundle install

    При этом Вundler считывает наименования и версии gem'ов из Gemfile'а, строит полное дерево зависимостей всех gem'ов от других gem'ов, сам решает все конфликтные вопросы и производит загрузку gem'ов. Загрузка нужных версий при этом осуществляется в папку .bundle в пользовательскую директорию. Если при этом нужно осуществить загрузку в директорию приложения, то нужно использовать ключ с указанием имени приложения:

    $ bundle install имя_приложения

    Однако в этом случае уже ранее загруженные для других приложений gem'ы не грузятся и остаются в папке пользователя. Чтобы загрузить их все повторно в папку приложения используйте:

    $ bundle install ипя_приложения --disable-shared-gems

    Существует возможность также не просто указывать в Gemfile имена gem'ов, но и их версии, например:

    gem 'gemname', '1.1.1'

    При этом если версия не указывается, то Bundler загружает последнюю СТАБИЛЬНУЮ версую gem'а.

    Можно также указать условия по загрузки желаемых версий, как то:

    gem 'gemname', '> 1.1.1' # старше версии 1.1.1
    gem 'gemname', '=> 1.1.1' # старше или саму версию 1.1.1
    gem 'gemname', '> 1.1.1', '<2.0.0' # старше версии 1.1.1, но 2.0.0 и выше
    gem 'gemname', '~> 1.1' # старше версии 1.1, но не 2.0 и выше

    Также можно указывать из какого источника ставить gem (необязательно)

    gem 'gemname', :git=>'ссылка на git репозиторий'

    И даже с локального компьютера

    gem 'gemname', :path=>'локальный путь'

    Если какие-то версии gem'ов не были указаны в Gemfile, их можно обновить запустив команду:

    $ bundle update

    После установки или обновления gem'ов Bundler создает Gemfile.lock, где будут указаны все специфические версии всех загруженных для приложения gem'ов. Этот файл будет использоваться для развертывания Rails приложения на других машинах с теми же самыми версиями gem'ов.

    Существует возможность также развернуть все приложение вместе с gem'ами. Для этого нужно создать пакет gem'ов, который разместится в папке vendor/cache:

    $ bundle package

    После этого все запуски Bundler'a для приложения будут приводить к установке gem'ов только из данного пакета, а не из внешних источников. Особенно это актуально для Rails-приложений, использующих свои gem'ы, которых нет в публичных источниках.

    Последнее замечание. Если вам не нужна работа Bindler'а в приложении - просто удалите файл Gemfile и Bundler перестанет использоваться.

    Опубликовано: 07.07.2012Категория: Ruby on RailsКомментарии: 0
  • Web-технологии
    Bitrix как попытка выиграть гонку, сев на рейсовый автобус

    Вчера состоялась интересная дискуссия на FB на тему использования CMS для ведения онлайн-бизнеса. Решил тут ею поделиться.

    Я: Использовать неповоротливые и громоздкие CMS типа Bitrix для интернет-бизнеса - это все равно, что пытаться выиграть гонку, сев на рейсовый автобус. На нем вы обязательно куда-то попадете. Но разве в числе лидеров? А Joomla - это если еще и за билет на заплатить... И ведь не Bitrix сам плох, а подход. И даже не столько подход. Но уж много очень людей рассчитывает на то, что столь универсальное (в ущерб уже даже продукту) средство решит ВСЕ их проблем раз и навсегда. И позволит оторваться от конкурентов.

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

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

    Роман: Вообще я для интернет магазина пришел к престашопу, а для странных разных сайтов - скорее к джумле. У вас какие предпочтения?

    Я: Ruby on Rails, чуть ранее Zend Framework

    Роман: Ну если народ интересуется как им продвинуть сайт, а вы довольно серьезное внимание обращаете на то, что движок надо правильно делать/конфигурировать, конечно у людей возникает вопрос - чайвой посоветуете-то? Все логично. Я много чего перелопатил и преста - самое то (для чисто интернет магазина), в россии ее правда особо не знают, но в россии много чего не знают). Раби он рейлс, это не совсем то, это скорее уже среда разработки, чем почти конечный продукт.

    Я: И в этом прелесть. Конечный продукт - это и есть рейсовый автобус...

    Роман: но рейсовый автобус и стоит 100 рублей, а не собственный автомобиль за миллион + еще бензин :) так что - доехать вполне сойдет, а по пути можно и на автомобиль заработать Ж)

    Я: Но потом не нужно просто удивляться, почему мы не в топ10 тех, кто пришел к финишу первый...

    Валентин: По-моему, вы, Роман и Леонид, говорите о разных вещах. Интернет-магазин - это та вещь, которой достаточно типовых решений, иногда с небольшой допилкой. И это не рейсовый автобус, а просто обычный серийный автомобиль. При этом нужно понимать, что 99 %25 создателей интернет-магазинов не строят Заппос или Амазон, а лишь зарабатывают на кусочек хлеба с маслом. Можно провести аналогию с магазинами в оффлайне - Apple может позволить себе возведение магазинов-дворцов, но магазин-дворец не нужен, чтобы продавать картошку на рынке. Правда, Битрикс - всё равно отстой, независимо от вышенаписанного. :)

    Роман: Валентин, вот с каждым словом соглашусь

    Виталий: Сайты визитки из 5 страниц на битриксе лепят, вот это реальный фетиш по webсадамаза. А еще этот сайт визитку на битриксе снабжают какой нибудь flash заставкой, которая работает только на последнем плеере. На вопрос к владельцам сайта "Зачем???????" Почти всегда слышу стандартный ответ "Ну это же круто". Видимо мне пора менять свои стериотипы и от рациональных решений переходить к понятию "Круто!"

    Я: Валентин. В последнее время прихожу все чаще к обратному выводу. Смотрите - маленький магазин обычно продает товар в большей степени успешно в том случае, когда рядом нет крупных магазинов. Как только по соседству открывается Ашан - все мелкие магазины быстро разоряются. И вот тут преимущество интернета, которое позволяет торговать тебе вне зависимости от своего географического положения (а это мы всегда умели подать как большой плюс интернет-торговли), теперь оборачивается катастрофическим минусом. Все конкуренты от покупателей в шаговой доступности. В сети - это как все магазины построены на одном пятачке. Подумайте!!!

    Ольга: а по-моему вы снобы, господа! битрикс им не нравится, ха, да в рунете 90%25 коммерческих сайтов на таком самописном или free отстое крутятся, что диву даешься. А bitrix - понятный, унифицированный, преднастроенный конструктор, который очень трудно поломать даже тупому программисту. Да, жрет ресурсы, да, не годится для высоконагрузочных проектов. А их в русскоязычном интернете что, много что ли?? А уж какой чудовищный трэш делают наши Кулибины на Ruby, это и не передать словами.

    Я: Он не только для высоконагружённых проектов, он и для проектов без нагрузки не годится... Я это все к чему затеял. Звонит мне знакомый - ему за 100 000 рублей предлагали готовый сайт по продаже мебели. И он мне звонил узнать сколько еще ему потребуется денег, чтобы заработать на продаже мебели в сети большие деньги. А в его ситуации - это как овощную палату прикупить у входа в Ашан. Другими словами - нельзя сейчас как 10 лет назад рассчитывать, что на стандартных инструментах типа Joomla, да без денег на маркетинг можно поднять большие деньги. Раньше - не можешь заработать в оффлайне, нет денег - иди торговать в интернет. Теперь картина обратная. Нет денег на нормальный интернет-ресурс - лучше купи оффлайновый магазин.

    Валентин: Леонид, в сети тоже есть нехоженые тропы и просёлки без "Ашанов". :) Надо только уметь искать. :)

    Я: Святые слова... Так вот - все идут обычно проторенными тропами :)

    Опубликовано: 06.07.2012Категория: Web-технологииКомментарии: 0