8K+

Ruby on Rails *

Фреймворк, написанный на Ruby

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

19 необщеизвестных приёмов

5 мин
2.1K
Заметка не новая, но я уверен, что и сейчас не все знают всё нижеперечисленное (Здесь и далее курсив переводчика).

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

Замер скорости в контроллерах — это очень просто. Используйте метод benchmark в любой модели.
Читать дальше →

STI — одна таблица и много моделей

3 мин
30K
Вчера, в заметке про полиморфные связи в комментариях был упомянут паттерн STI. Как выяснилось, не все знают что это такое, как работает и зачем нужно. Решил восполнить этот информационный пробел и вкратце рассказать об этом шаблоне проектирования и его реализации в Рельсе.

STI (Single Table Inheritance) — паттерн проектирования, который позволяет перенести объектно-ориентированное наследование на таблицу реляционной базы данных. В таблице БД должно присутствовать поле идентифицирующее название класса в иерархии. Зачастую, в том числе в RoR, поле называют type.

Таким образом, мы можем иметь одну таблицу и несколько типов объектов (моделей), которые будут в ней храниться. В случае с вышеупомянутой хабразаметкой — это одна таблица постов, которая хранит посты разных типов: ссылка, подкаст, статья, перевод и т.д.

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

Приступим.
Читать дальше →

Создание мульти-модельных форм

7 мин
21K
Иногда требуется создать форму, данные которой связаны с несколькими таблицами. К примеру, у вас имеется две модели: Owner и Car. При добавлении нового Owner'a хотелось бы, чтобы была возможность сразу добавить машину. С появлением Rails 2.3 это стало проще.

# Старый вариант (приблизительный)
def create
  @owner = Owner.new(params[:owner])
  ...
  if @owner.save
    @car = Car.new(params[:car])
    if @car.save
    ...
end

# Новый вариант, Rails 2.3+
def create
  @owner = Owner.new(params[:owner])
  ...
end


Где же магия?

Полиморфные связи

10 мин
11K
На днях в блоге Ruby on Rails появилась статья о полиморфных связях, в которой автор писал всякие разные вещи, но при этом забыл упоминуть, как их использовать и зачем они нужны (потом, конечно же, исправился, но все равно написал достаточно поверхностно).
Поначалу я даже испугался, что это моя статья каким-то непостижимым образом вырвалась из «черновиков» и попала в общую ленту. Потом разобрался, собрался с мыслями, и решил таки дописать свою.

Что же такое полиморфные связи и для чего они нужны? В одном из своих скринкастов Ryan Bates уже рассказывал об этом, и я ни в коем случае не хочу рассказывать то же самое. Ситуация была следующей:
у нас есть модели Статьи, Фотографии и События. А еще есть модель Комментарии. А еще очень хочется все комментарии (комментарии статей, фотографий и событий) хранить в одной таблице.
Статей по этой проблеме в интернете очень много, но бывают и случаи «наоборот». Далеко ходить не нужно, давайте попробуем разработать функционал постов Хабрахабра!
Читать дальше →

Backup My App – резервное копирование сайтов на Ruby On Rails

1 мин
1.1K
Привет, ruby-on-rails-разработчики. Я работаю программистом в Теориях и практиках и хочу рассказать про Backup My App – сервис бекапа для ror-приложений, который мы используем.

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

Как это работает

Сервис платный: есть бесплатный тарифный план только для одного приложения на один гигабайт, либо нужно платить за 5 гигабайтов 3 доллара в месяц, за 100 гигабайтов – $60. После регистрации нужно
  • установить плагин
    $ script/plugin install git://github.com/crocoduck7/backupmyapp.git
  • запустить генератор
    $ script/generate backupmyapp KEY=выданный ключ
а потом отправить изменения на сервер. После этого сайт – код, база данных, файлы – начнет бекапиться.

Что это даст



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

Пост — вопрос

1 мин
761
Приветствую.
По долгу службы иногда приходится давать оценку сторонним разработкам, людям и так далее. Сегодня был в крупной конторе, лидере рынка в своей области. Обычно моя задача в подобных мероприятиях подобна поиску иголки в стоге сена — я ищу издержки, дыры в бюджетах и лишних сотрудников. Довольно трудно найти изъяны в системах, которые поднимают и ведут вменяемые, умные люди. Однако сегодня было исключением. С порога тех.руководитель начал говорить, что их узкое место — RnR, т.е. бэкенд. Я уточнил, действительно ли это не база. Однако посмотрев на вывод htop (linux на борту) действительно увидел, что 2 сервера (по 6 гигов оперы и по 2 ксеона последнего поколения с 4-мя ядрами) загибаются под «тяжбой» проекта с посещаемостью 30к хостов в день и 300к хитов в день. Причем узким место действительно является RnR, судят по htop. Ну, или кривые руки разработчика.
Собственно поэтому и вопросы к вам, уважаемые коллеги, т.к. у меня пробел по части RnR:

1) Действительно ли RnR способно жрать столько программного процессорного времени, или же искать узкие места в ПО? И если искать, то чем? Существуют ли дебагеры?
2) Проблема есть, но решить её надо быстро, до декабря. Существуют ли какие-то акселераторы для Ruby? Кеши?
3) В качестве решения проблемы их техруководителем предложено купить дорогущий сервер 100к+ рублей для его дальнейшей кластеризации с другими. Я предлагаю за те же 100к купить 4 слабых сервера, накинуть на них RnR, сурсы и балансировать нагрузку. С одной стороны это переплата за место в стойке, с другой это явно лучше, чем один мощный сервер. С моей точки зрения.
Читать дальше →

Хостинг для Ruby On Rails приложений

1 мин
28K
Добрый день, Хабр!

Встала у меня проблема выбора хостинга для своих Ruby On Rails проектов. На сервере компании, где я работаю я их больше размещать, по определённым причинам, не могу. Поэтому, Хабр, прошу тебе сказать мне, каким хостингом лучше пользоваться и почему.

Спасибо.

Повышаем производительность Ruby on rails приложений с помощью ActiveMQ

4 мин
8.8K
В своём посте хочу рассказать о возможности использования ActiveMQ в проекте написанном на фреймворке Ruby on rails.

Что такое Message Queue?


MQ – это архитектура обмена сообщениями между компонентами приложения в асинхронном режиме. Т. е. отправитель и получатель могут взаимодействовать в разное время. Состоят такие системы из producer'а (отправителя) и consumer'a (получателя) которые взаимодействуют между собой через broker.

Используя такие системы можно существенно увеличить производительность приложения, выполняя код в асинхронном режиме. Допустим у вас есть код который очень замедляет выполнение какой то части на вашем сайте, чтобы пользователь не ждал завершение работы такого кода, лучше его выполнить в асинхронном режиме. Несколько простых примеров:
— генерация thumbnails;
— сбор статистики;
— рассылка писем/сообщений;
— удаление данных с таблиц;
— индексация данных;
— импорт данных в базу.

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

Интервью с DHH (создателем Rails)

2 мин
2.3K
25 июля twit.tv провели интервью с David Heinemeier Hansson (для непосвященных — создателем Rails).

Советую его послушать самому, если с английским нет проблем, а я законспектировал на русском основные мысли про Ruby и Ruby on Rails.
Читать дальше →

ActiveRecord vs SQL

2 мин
7.9K

Привет, %username%!


Недавно я начал изучать Ruby on Rails и передо мной встала задача — реализовать импорт данных из CSV файла в MySQL таблицу. Задача не сложная и код я написал довольно быстро, но вот только я был очень удивлен тем, что пока он выполнялся, я успел налить себе кофе и выкурить сигарету.

— Что-то здесь не так! — подумал я и начал копать.
Читать дальше →

RSpec. Часть #1: создаем тесты для модели

3 мин
39K
Как и обещал, я начинаю цикл статей, на тему RSpec.

В этой статье, я постараюсь, подробно рассказать, как писать тесты для моделей в Ruby on Rails. Если вы уже знакомы с rspec_on_rails, поправьте и дополните меня, если что то не так. Помните, что я изучаю Rspec вместе с вами и могу где то ошибаться.
Читать дальше →

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

использование JSON в Ruby on Rails, плюс пример var_dump на Javascript

2 мин
6.7K
В этой статье я поведаю тебе %username%, как работать с JSON, а так же как вывести дамп любой переменной javascript для дебага.

Сначала немного теории. И так, основываясь на определение взятом с Wikipedia.
JSON — это текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.
Читать дальше →

3 простых совета, которые сделают ваше Rails приложение быстрее, часть #1

2 мин
1.7K
  Я знаю, что уже много людей писали руководства, помогающие вашему веб-приложению работать быстрее. Но я постараюсь сосредоточиться на самых простых, но наиболее эффективных методах, которые помогут вам существенно ускорить ваше приложение без потери какого-либо функционала из Ruby on Rails.
Совет #1: Приберите ваш статический контент
Совет #2: Уберите все лишнее
Совет #3: Кэшируйте всю страницу
Читать дальше →
12 ...
34