Как стать автором
Поиск
Написать публикацию
Обновить
1.67

Ruby *

Динамический высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Инкрементальный сборщик мусора в Ruby 2.2

Время на прочтение9 мин
Количество просмотров9.2K
В этой статье рассматривается инкрементальный сборщик мусора (incremental GC), который был представлен в Ruby 2.2. Мы называем этот алгоритм RincGC. RincGC позволяет добиться более короткой паузы (GC pause time) по сравнению с Ruby 2.1.

Об авторе: Коичи Сасада (Koichi Sasada) работает в Heroku вместе с Nobu и Матц'ем над ядром ruby. Он написал YARV, сборщик мусора по поколениям (RgenGC) для Ruby 2.1, а также incremental GC для ruby 2.2 и данную статью.
Читать дальше →

10 ошибок в Ruby / Ruby on Rails, которые легко исправить

Время на прочтение4 мин
Количество просмотров32K
Программисты делают ошибки в коде. Некоторые просто раздражают (ошибки, не программисты – прим. переводчика), другие могут быть действительно опасными для приложения.
Представляю вам свою подборку из 10 распространенных ошибок разработчиков Ruby/RoR и советов о том, как их избегать. Надеюсь, они помогут сократить вам время отладки кода.
Читать дальше →

Горизонтальное масштабирование websocket-ов на Ruby

Время на прочтение6 мин
Количество просмотров8.8K
Не так давно вышла статья, в которой автор описывал свой framework для написания приложений с использованием Ruby, Sinatra и websoсket. Но в том решении не был затронут вопрос горизонтального масштабирования. Так при подключении к одному из узлов, пользователи могут получать уведомления/данные только о событиях/изменениях, вызванных пользователями этого же узла, а при изменениях, внесенных через другой, они не узнают. Для решения данной задачи необходимо организовать общую шину данных. Рассматривать данную задачу буду в контексте обмена сообщениями клиент-клиент.
Читать дальше →

Любителям Ruby и Coffeescript — очередной велосипед?

Время на прочтение20 мин
Количество просмотров15K
image

Меня всегда привлекали отзывчивые, динамичные интерфейсы, созданные на Javascript, но каждый раз, пытаясь погрузиться в изучение этого языка, я превращал свой мозг в кашу и ел её оставлял это до «лучших» времен, возвращаясь к статичным страницам на клиенте и PHP на сервере. Время шло.

Год назад, шатаясь по страницам сети, я наткнулся на статью про Coffeescript. Хм, интересно… Пары примеров кода было достаточно, чтобы заразиться идеей где-то его применить, но что то меня напрягало — хотелось мне какой-то фреймворк, который сам заботился бы о компиляции coffee в js. Так я нашел Rails, а вместе с ним ruby, gems, sass и кучу всего того, что привело меня в экстаз критическую точку невозврата…

Доброго времени суток, господа! Меня зовут Денис, и в этой статье я хочу поделиться с вами своими взглядами на разработку front-end'a и небольшой историей изобретения одного велосипеда, а вот очередного или нет — судить вам.
Читать дальше →

Grape: не рельсами едиными, ч. 2

Время на прочтение5 мин
Количество просмотров7.1K
В первом своем посте про Grape я быстренько проскакал по основным его возможностям, за что заслуженно был засыпан упреками в излишней сжатости подачи материала. По результатам публикации прошлого поста я пообещал практический пример применения фреймворка, а также сравнительные бенчмарки.

Сегодня мы приступим к созданию примера — разработаем API, которое умеет:
— регистрировать пользователя
— активировать его по email
— обновлять данные авторизованного пользователя
— возвращать профиль авторизованного пользователя

Читать дальше →

Ускоряем написание Selenium-автотестов на Ruby

Время на прочтение3 мин
Количество просмотров16K
Одним из инструментов, позволяющих автоматизировать взаимодействие с браузером, является Selenium Webdriver. В действительности автоматизированные тесты веб-страниц с использованием Selenium Webdriver выглядят довольно громоздко. Вот «небольшой» пример, который параллельно в двух браузерах открывает страницу поисковика Google, заполняет поисковую строку и отправляет форму:


Читать дальше →

Убиваем внешние запросы во время тестирования rails приложений с помощью VCR

Время на прочтение3 мин
Количество просмотров9.9K


Совсем недавно, у меня возникла проблема заключающаяся в том, что тесты моего приложения довольно долго ходят. Это происходит в виду того, что некоторые части кода любят обращаться к сторонним сервисам вроде iTunes и Facebook.

Обращение к сторонним сервисам во время тестирования это зло по следующим причинам:

  1. Eсли во время исполнения тестов начинаются проблемы со связью, то они могут либо медленно проходить, либо вовсе падать.
  2. Как уже и писалось — довольно сильно замедляется скорость прохождения тестов.
  3. Возможны проблемы с ограничением числа запросов самими сервисами.

Читать дальше →

Сервис временных зон на Ruby и Postgis

Время на прочтение5 мин
Количество просмотров5.4K
В одном из проектов, в которых я учавствовал, возникла задача определения временной зоны по текущей геолокации пользователя. На backend приходила запись, создаваемая пользователем с помощью смартфона. Время приходило не в UTC, но в параметрах содержались координаты.
Конечно, существуют готовые сервисы (например The Google Time Zone), но все они платные или сильно ограничены по функционалу. Вот я и решил написать собственный сервис.
Читать дальше →

Rails или Sinatra: лучшее из двух миров?

Время на прочтение11 мин
Количество просмотров18K
Из года в год на мир Ruby снисходило благословление – здесь появилось завидное количество фреймворков для разработки веб-приложений. Однако двое из них недавно стали явными лидерами этой сферы. Большинство читателей этого сайта наслышаны о Ruby on Rails. Он был разработан Дэвидом Хайнемайером Хенссоном в 2004 и представляет собой MVC фреймворк, который помогает повысить продуктивность и сделать при этом разработчиков счастливыми. Sinatra был создан Блейком Мизерани в 2007, является предметно-ориентированным языком (domain-specific language), который выступает обёрткой для уровня легковесных HTTP запросов и ответов поверх Rack. Его минималистичный подход изящен и элегантен. Статистика на RubyGems.org наглядно показывает, насколько популярны оба этих фреймворка: Rails был скачан 7 миллионов раз, а Sinatra – 1.5 миллиона. Именно Rails вовлёк меня в веб-разработку на Ruby, но на протяжении нескольких последних лет я гораздо чаще использовал Sinatra (и вот 7 причин, из за которых я его люблю). На поверку оказалось, что мне для построения приложения нужен лишь Sinatra вместе с несколькими гемами. Это заставило меня поразмыслить над тем, а можно ли с Sinatra осилить любой проект. Когда лучше всего использовать Sinatra, а когда наилучшим выбором будет Rails? Пытаясь найти ответ на этот вопрос, я спросил у знаменитых Ruby разработчиков, что они думают по этому поводу.
Читать дальше →

Самый простой deploy приложения на Ruby on Rails

Время на прочтение5 мин
Количество просмотров31K

Полгода назад я написал пост Deploy приложения на RoR 4 с помощью Capistrano 3. Прошло время, я получил много положительных отзывов, но были и отрицательные. Из них можно было понять следующее:
  • Инструкция слишком сложная для новичка
  • Очень много всего приходится делать «руками»

Я подумал и написал gem 'capistrano3-ubuntu-server-config', который полностью настраивает Ваш «чистый» Ubuntu сервер. Всё, что Вам нужно сделать руками — создать нового пользователя и дать ему права visudo (причем давать ему права на passwordless sudo ему не надо). Он может:
  • Настроить SSH (Добавить настройки 'PermitRootLogin no', 'UseDNS no', 'AllowUsers username')
  • Создать и настроить swap (размер запрашивается)
  • Сделать
    sudo apt-get update
    и
    sudo apt-get upgrade

  • Установить из исходников и настроить как чистый Nginx, так и с модулем Pagespeed
  • Установить PostgreSQL из репозитория, затем создать суперпользователя БД (имя пользователя и пароль запрашиваются)
  • Установить из исходников и настроить Redis
  • Установить RVM с последней версией Ruby и gem'ами Rails, Bundler
  • Скопировать Ваш приватный ssh ключ (например для доступа к приватному git репозиторию) с локальной машины на сервер и добавить его в ~/.ssh/config
  • Установить imagemagick из репозитория (Необходим для Paperclip, постоянно его забываю ставить)
  • Установить любые дополнительные пакеты из репозитория (Запрашивает какие именно)

Можно запустить конфигурационный wizard, который узнает, что именно из вышеперечисленного необходимо сделать и заранее спросит все настройки, чтобы можно было потом пойти попить кофе, а можно запустить отдельные таски. Данный gem будет полезен не только Rails разработчикам, а всем, кто использует Capistrano для деплоя.

Эта статья раскроет следующие темы:

Узнать как задеплоить Ваше приложение за 5 минут активного времени

Из опыта перевода руководства по стилю оформления

Время на прочтение2 мин
Количество просмотров3.2K
Здравствуйте, уважаемые хаброжители! Хочется представить вашему вниманию опыт перевода известного в среде разработчиков на Руби руководства по стилю оформления кода. Оригинальный текст данного руководства составляется сообществом программистов на Руби под творческим руководством Божидара Бацова.
Читать дальше →

Как мы Select2 в хелпер заворачивали

Время на прочтение6 мин
Количество просмотров30K
Думаю, многие знакомы с Select2. Всё в нём замечательно: и элементы красивые, и кастомизации вагон, и c ajax работает и ещё много много полезного делать умеет. Только проблема одна: инициализация довольно громоздкая (js писать надо, экшн иметь для ajax-овой подгрузки результатов и так далее). Это было не шибко удобно и решили мы сделать свою надстройку для Select2, в которой и js писать не надо, да и за пределы вьюхи уходить почти не придётся. О том как мы это делали и что получилось читайте под катом.

Читать дальше →

Автоматизация тестирования iOS-приложений с применением Calabash и Cucumber

Время на прочтение13 мин
Количество просмотров33K


В процессе разработки любого приложения наступает момент, когда в связи с ростом функциональности трудозатраты на регрессионное тестирование становятся непомерно велики. Другая причина значительной трудоемкости тестирования iOS-приложений (так же как и любых других мобильных приложений) — разнообразие линейки поддерживаемых устройств и версий ОС, необходимость тестирования в альбомном и портретном режимах, а также при различных условиях соединения с интернетом. Стремление оптимизировать процесс тестирования приводит нас к необходимости его полной или частичной автоматизации.

В этой статье я расскажу о том, как мы автоматизируем тестирование наших приложений (ICQ и Агент Mail.Ru), поделюсь нашими наработками в этой области и упомяну о проблемах, с которыми мы сталкиваемся.
Читать дальше →

Ближайшие события

Новая версия RubyMine: Chef, Puppet, EditorConfig и многое другое

Время на прочтение4 мин
Количество просмотров15K
Мы в JetBrains искренне считаем, что программирование отнюдь не сводится к простому написанию кода. Программировать — значит постоянно развиваться, приумножать свои знания, совершенствовать навыки, используя при этом самые лучшие инструменты. Если вам знакома притча о двух дровосеках, в которой более искусен оказывается тот, кто не забывает наточить свой топор, то вы поймете наше стремление оттачивать инструменты разработки с каждым следующим релизом. Не стал исключением и последний релиз RubyMine, нашей среды для разработки на Ruby и Rails, о котором мы и хотим рассказать подробнее в этом посте. Кстати, вчера стало доступно для скачивания и первое обновление — RubyMine 7.0.1.



Подробнее о RubyMine 7

VexorCI: как мы готовим файлы конфигураций

Время на прочтение2 мин
Количество просмотров2.7K
Привет!

Когда VexorCI начинался, мы решили, что для начала использования не обязательно писать файл конфигурации. Мы сами пытаемся догадаться, что именно нужно для запуска тестов и постоянно учим сервис распознавать новые настройки. Но мир разработки очень разнообразен, поэтому некоторым проектам конфиги необходимы.
За последние пару месяцев к Vexor подключилось 100 проектов. Очень разных проектов с уникальными настройками. За это время мы много узнали о том, как готовить файлы конфигурации так, чтобы это было удобно нашим юзерам. В процессе мы пересмотрели наш первоначальный подход и хотим поделиться с вами нововведениями.
Читать дальше →

Набор Ruby библиотек для CMS и сайта медиа издания

Время на прочтение15 мин
Количество просмотров30K


Набор библиотек для разработки CMS медиа издания практически ничем не отличается от любого другого приложения. На примере приложения для Ленты и Ведомостей мы решили прокомментировать выбор каждой библиотеки. Описание составлено в формате обсуждения каждого гема.
Стенограмма

Elastics: простой ElasticSearch-клиент для Ruby со всем необходимым

Время на прочтение2 мин
Количество просмотров6.8K
Года полтора назад столкнулся с проблемой выбора клиента к ElasticSearch для node.js. Тогда нашлось несколько проектов, но все были либо слишком усложненные, либо написаны абы как. Хотя казалось: все что нужно — это обертка вокруг http запроса с JSON.encode/decode, обработкой ошибок и парой хэлперов. Тогда для ноды я быстро написал небольшой модуль, который оказался очень удобным.

Недавно надо было прикрутить ES к приложению на рельсах. Часть клиентов для Ruby уже давно не поддерживается, другие слишком усложнены. При этом многие клиенты не имеют механизма управления алиасами, хотя для ES это очень важный функционал.

Я решил написать минималистичный гем, взяв за основу модуль для node.js и расширив его функционал так, чтобы были все самые необходимые инструменты для разработки, деплоя и управления. Вот что получилось.
Читать дальше →

Конфигурируем Ruby модуль

Время на прочтение4 мин
Количество просмотров6.4K
Я думаю вы знакомы с методом configure, который многие гемы предоставляют для конфигурации. Например конфигурация carrierwave:

CarrierWave.configure do |config|
  config.storage = :file
  config.enable_processing = false
end

Как реализовать это в своем модуле?
Читать дальше →

ActiveRecord немного про грабли, Relations и индексы

Время на прочтение8 мин
Количество просмотров23K
Хочу рассказать Вам о наболевшем: о работе с AR в целом и с Relation в частности; предостеречь от стандартных садовых изделий, которые легко могут испортить жизнь и сделать код медленным и прожорливым. Повествование будет основываться на Rails 3.2 и ActiveRecord того же разлива. В Rails 4, конечно же, много чего нового и полезного, но на него ещё перейти нужно, да и фундамент в любом случае один и тот же.

Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
Читать дальше →

VexorCI – Что нового?

Время на прочтение2 мин
Количество просмотров5.3K
Привет, Хабр. Этим постом мы начинаем наши пятничные новостные выпуски, в которых будем рассказывать о новых технологиях, поддержку которых мы внедрили в наш проект, а также о фичах, которые сделают работу с Vexor максимально продуктивной. Наша команда учитывает пожелания пользователей, и постепенно мы расширяем наш функционал.
Напомним, что Vexor CI – облачный continuous integration сервис для разработчиков с неограниченными ресурсами и поминутной оплатой, позволяющий эффективно тестировать проекты.
Читать дальше →

Вклад авторов