Обновить
2.1

Ruby *

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

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

7 трюков при работе с массивами в Ruby

Время на прочтение2 мин
Охват и читатели30K
ruby arrays

В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.
Читать дальше →

VkInviter – приглашатель-помощник администраторам групп ВКонтакте

Время на прочтение6 мин
Охват и читатели96K
Всем доброго дня!

Я являюсь администратором одной музыкальной группы ВКонтакте (далее – ВК). Музыканты часто ездят с гастролями по разным городам России и странам СНГ. Один из способов оповестить фанатов группы о предстоящем концерте в их городе – разослать приглашения на соответствующую встречу ВК.
В статье хочу показать одно из возможных решений этой задачи.

Надеюсь, что данная статья будет полезна другим администраторам групп, количество приглашений пользователей на события не в их городе уменьшится и больше людей разблокирует возможность приглашать их на встречи!
Читать дальше →

Ruby 2.1.1, с днём рождения!

Время на прочтение1 мин
Охват и читатели4.7K
Сегодня, 24 февраля, исполняется 21 год с момента анонса языка программирования Ruby. Такое событие разработчики решили отметить выпуском патча для Ruby 2.1, который назвали Ruby 2.1.1.

В новой версии сделано несколько усовершенствований, в том числе улучшена производительность и исправлен ряд багов. Подробнее см. changelog.
Читать дальше →

Deploy приложения на RoR 4 с помощью Capistrano 3

Время на прочтение16 мин
Охват и читатели64K

Представьте: Вы — веб-разработчик, который только недавно освоил Ruby on Rails. И тут Ваш первый проект подходит к стадии, когда его нужно выложить в интернет.
Вы, конечно, можете залить его на Heroku, но тамошние цены немного кусаются. Остается только купить VPS, настроить его и выложить проект туда.
«Что может быть проще? Найду какой-нибудь гайд, да следаю всё по нему» — подумаете Вы. Вот только гайдов, которые не просто выкладывают команды, но и объясняющие, что эти команды делают, — единицы, да и те используют уже устаревшую вторую версию Capistrano.

Поэтому я решил написать свой гайд, в котором постараюсь подробно рассмотреть:
  • Первичную настройку сервера
  • Установку и настройку nginx (с модулем PageSpeed), postgresql, redis
  • Установку rvm, rails
  • Настройку гема foreman для управления процессами Вашего приложения
  • Настройку сервера Unicorn
  • Настройку гема Capistrano (v3.1) для автоматизации деплоя


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

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

Учебник программирования «Hello Ruby» для детей собрал $288 000 на Kickstarter

Время на прочтение2 мин
Охват и читатели28K
Линда Лиукас (Linda Liukas) начала программировать в возрасте 13 лет, сделав первый сайт на HTML и Javascript. Это была глупость и внезапный порыв, но с тех пор у Линды появилась постоянная любовь — программирование. Сейчас, спустя 14 лет, она решила помочь другим детям испытать такие же чувства — и написала учебник программирования для маленьких детей. Книга кажется настолько интересной, что для её издания удалось собрать почти $300 тыс. на Kickstarter (вместо требуемых для издания $10 000), и это за две недели до окончания кампании!


Рыжеволосая Руби и её друзья
Читать дальше →

Постинг в популярные соц сети с помощью джема social_poster

Время на прочтение2 мин
Охват и читатели6.1K
SocialPoster — это джем, который позволяет с легкостью постить в популярные социальные сети из вашего руби приложения. В данный момент есть поддержка таких сетей:
  • Facebook
  • Twitter
  • Livejournal
  • Vkontakte
Читать дальше →

Выборка случайных документов из коллекции MongoDB

Время на прочтение2 мин
Охват и читатели6.4K
Недавно я столкнулся с одной довольно тривиальной задачей, где мне нужно было случайным образом выбирать из базы посты, написанные пользователями сайта. Проект написан на Rails с использованием MongoDB в качестве базы данных и джем mongoid для работы с ней. Не то что бы задача была сложной для выполнения, но в то же время, на удивление, нет абсолютно простого решения на подобие sort_by_random или вроде того. Под катом пару примеров как это можно решить.
Читать дальше →

Эволюция сборщика мусора в Ruby. RGenGC

Время на прочтение5 мин
Охват и читатели17K
Коити: Порог срабатывания сборщика мусора в Ruby — 8 МБ. Почему используется такое маленькое значение?
Matz: Потому что 20 лет назад я работал на машине с 10 МБ памяти.

Вопрос производительности всегда был одним из наиболее обсуждаемых и актуальных в Ruby-сообществе. Будь то высоконагруженный веб-сайт или простой скрипт по бекапу данных — скорость работы является их важнейшей характеристикой. При этом знание возможностей и ограничений языка разработки зачастую служит важным источником идей для оптимизации, позволяет «выжать» максимум из системы.

В статье речь пойдет об одной из наиболее сильно влияющих на производительность частей языка Ruby — сборщике мусора, алгоритмах его работы и улучшениях, внесенных в его работу в последних версиях языка. Речь пойдет о наиболее распространенной, «канонической» реализации Ruby — так называемой MRI или CRuby.
Читать дальше →

Полиморфные сквозные ассоциации в Ruby on Rails

Время на прочтение4 мин
Охват и читатели15K
В статье идет речь о методе создания полиморфизма для связей many-to-many в Ruby on Rails.

Задача


Допустим, что необходимо разработать систему управления грузовым транспортом. В нашем распоряжении имеются несколько видов этого транспорта: поезда, вертолеты, грузовики и баржи. И известно, что каждое средство осуществляет перевозку только в строго определенные населенные пункты. Например, часть грузовиков катается по центральной части России, часть по южной, вертолеты работают в Сибири и на Камчатке, поезда вообще ограничены железнодорожным полотном и так далее.
Каждый вид транспорта в разрабатываемой системе будет представлен своим классом: Train, Copter, Truck, Ship соответственно.
Населенные пункты (города, поселки, научные станции, тут нас интересует не размер, а географические координаты), куда осуществляется перевозка, представлены классом Location.
Стоит условие: к каждой единице транспорта может быть привязано сколько угодно Location. В свою очередь к каждому населенному пункту может быть привязано сколько угодно единиц транспорта разных видов.

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

Как использовать Memcached с Ruby on Rails в Ubuntu 12.04 LTS

Время на прочтение5 мин
Охват и читатели13K
Memcached — система для кэширования объектов в памяти, которая работает очень быстро. Использование Memcached может значительно увеличить скорость работы Rails-приложения с минимальными затратами.

Предварительные условия

Предполагается, что в вашей системе уже установлены Ruby on Rails и Memcached. Если это не так, то вам помогут ссылки, приведенные ниже:

Также предполагается, что у вас есть запущенное Rails-приложение, которое вы планируете оптимизировать с помощью Memcached.
Читать дальше →

Аутентификация в Rails-приложениях с помощью Devise. Часть 1: базовая настройка

Время на прочтение8 мин
Охват и читатели89K
Предлагаю вашему вниманию один из лучших, на мой взгляд, гемов для аутентификации в rails-приложениях. К сожалению, русскоязычной информации по данному гему очень мало, в том числе и на хабре, поэтому хочу осветить данную тему. Статья, в первую очередь, рассчитана на новичков и представляет из себя подробный туториал по настройке аутентификации на основе упомянутого гема. В первой части я освещу шаги по базовой настройке. Далее подробнее о геме.

Devise — это ruby-гем, предоставляющий возможности для аутентификации в rails-приложениях. Devise работает в связке с гемом Warden, который в свою очередь предоставляет сам механизм для аутентификации в rack-базированных ruby-приложениях. Основные особенности Devise описаны ниже:
  • основан на Rack;
  • является законченным MVC-решением, основанным на Rails;
  • разрешает вход в систему по нескольким моделям одновременно;
  • основан на модульности: использует только то, что вам действительно необходимо.

Итак, приступим к установке и настройке Devise для вашего rails-приложения. Дальнейший процесс для удобочитаемости будет разбит на отдельные шаги.
Читать дальше →

Поиск недостающих ключей в yaml-файлах

Время на прочтение2 мин
Охват и читатели3.4K
Иногда open source проекты переводятся на множество иностранных языков. С одной стороны это делает их более доступными для широкого круга пользователей, но с другой стороны, все эти переводы нужно поддерживать. Переводы обычно разделены по yaml-файлам и выделены в отдельную директорию, содержимое которой выглядит примерно так: en.yml, ru.yml, de.yml…
Читать дальше →

Вышел Ruby 2.1

Время на прочтение2 мин
Охват и читатели11K
Спецификации Ruby обновились до версии 2.1.0. В новой версии языка программирования сделано несколько эволюционных изменений. В неофициальных бенчмарках на Rails версия 2.1 показывает результат примерно на 20% выше, чем 2.0, которая, в свою очередь, на 60-70% быстрее 1.9.3.

Вкратце, самые важные из них:

  • VM (кэширование методов)
  • новый сборщик мусора RGenGC (см. презентацию ko1 на RubyKaigi и на RubyConf 2013)
  • изменения в синтаксисе
    • новая запись дробей с использованием двух слэшей ("//") между числителем и знаменателем, см. #8430
      • 1 // 2 == Rational(1, 2)
      • 1 // 1 == Rational(1, 1)
      • 0 // 1 == Rational(0, 1)
    • новые суффиксы i, r и ri для записи комплексных и рациональных чисел
      • "42r" и "3.14r" расцениваются как рациональное число Rational(42, 1) и 3.14.rationalize, соответственно. Но экспоненциальная форму с суффиксом 'r', такая как "6.022e+23r", не принимается.
      • "42i" и "3.14i" расцениваются как Complex(0, 42) и Complex(0, 3.14), соответственно.
      • "42ri" и "3.14ri" расцениваются как Complex(0, 42r) и Complex(0, 3.14r), соответственно.
  • определение функции def теперь возвращает символ её названия вместо nil, см. #3753
Читать дальше →

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

Пишем свой синтаксический анализатор JSON (в горошек и с перламутровыми пуговицами)

Время на прочтение13 мин
Охват и читатели10K
Эта статья была написана Аароном Паттерсоном, Ruby разработчиком из Сиэтла, штат Вашингтон. Он увлечен разработкой на Ruby вот уже 7 лет и будет рад поделиться своей любовью к этому замечательному языку.

Салют всем! Надеюсь, у вас отличное настроение. Сегодня солнце ненадолго выглянуло из-за туч, так что уж у меня-то точно все прекрасно!

В этой статье мы рассмотрим ряд инструментов компиляции для использования в связке с Ruby. А для погружения в предмет мы напишем синтаксический анализатор JSON. Уже слышу недовольные возгласы вроде: «ну Аарон, ну зачем? Разве их уже не 1,234,567 штук понаписано?» Вот именно! У нас уже 1,234,567 анализаторов JSON написанных на Ruby! И мы тоже будем производить анализ JSON, потому что грамматика его достаточно проста для завершения работы за один раз, и потому что она тем не менее достаточно сложна, чтобы можно было с умом применить разработанные для Ruby инструменты компиляции.

Прежде чем вы продолжите чтение, хочу обратить внимание на то, что это отнюдь не статья о том, как анализировать JSON, а о том, как использовать инструменты анализа и компиляции в Ruby.
Итак...

Ruby: cheatsheet для изучения

Время на прочтение14 мин
Охват и читатели61K
Это — статья-roadmap-cheatsheet для изучающих Ruby. Вместо того, чтобы рассказывать очередной how-to я постараюсь расписать все те вещи, которые, на мой взгляд, можно изложить кратко и емко, с упором на то, что программисту пришедшему с других языков и платформ может показаться не очевидным, антипоисковым и просто затратным по времени на изучение без подсказок — на остальное просто дам ссылки. Не смотря на то, что в природе существует множество туториалов/кастов/книг/чего угодно по чему угодно — именно такого формата мне самому всегда не хватает. И по сути, это те вещи, которые чаще всего рассказываю при вопросах «а как оно вообще?», «с чего начать?», «а как делается такая вот штука?», «а какой gem лучше?». Кстати, пока работал над этой статьей на Хабре появилась похожая про Python — видимо, идея витает в воздухе.
Читать дальше →

Сезон обновлений в JetBrains: RubyMine 6.0

Время на прочтение3 мин
Охват и читатели10K
image

Мы выпустили RubyMine 6 — новую версию нашей профессиональной интегрированной среды разработки для Ruby и Rails. В 6-й версии добавлена долгожданная поддержка работы с несколькими проектами, для ускорения работы переписан парсер Ruby, которому заодно добавили поддержку Ruby 2.1-preview1. IDE стала значительно производительнее, а поддержку Ruby 2.1-preview2 мы планируем сделать в RubyMine 6.0.1.

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

Rails переадресация старых url

Время на прочтение3 мин
Охват и читатели3.7K
Здесь опишу как я боролся с переездом страниц на новые url.
Эта заметка рассчитана на новичков в Ruby On Rails.

Изначально имею свой проект на Ruby on Rails, структура url в нем выглядит следующим образом: /locale/group/product
пример: /ru/bar-code-scanners/datalogic-magelan-1100i

group и product это permalink — строка по которой осуществляется поиск в DB, в место id.

Проблема в том, что пользователи которые добавляют контент на сайт иногда допускают ошибки в permalink.
Вот пример: /ru/bar-code-scanners/datalogic-magelan-1100i
Ошибка в том, что магелан пишется с двумя ll — magellan.
Но товар был добавлен относительно давно и страница уже проиндексирована поисковиками, по этому стоит задача исправить permalink и настроить пере адресацию на новый URL.
Читать дальше →

Обучение онлайн

Время на прочтение1 мин
Охват и читатели35K
Для изучающих Ruby / Rails, будет полезно ознакомиться с подборкой бесплатных онлайн курсов, туториалов и интерактивных занятий, посвященных языку программирования Ruby и фреймворку Ruby on Rails.

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

Работа с данными в Yaml

Время на прочтение2 мин
Охват и читатели24K
На днях я решал задачу по хранению данных в yaml-файле, с возможностью для пользователей редактировать эти данные. Все немного усложнялось тем, что пользователи имели разные права доступа. К каждой строке, которую мы храним, должна быть доступна информация о том, какие пользователи имеют доступ на редактирование данной строки.
Читать дальше →

Datamapper many_to_many relationship update

Время на прочтение2 мин
Охват и читатели1.2K
Однажды при использовании Datamapper столкнулся с задачей обновления коллекции отношений many_to_many, перерыл множество источников, но толкового объяснение так и не нашел. Хочу представить мое решение.
Читать дальше →

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