Как стать автором
Обновить

Домашний файлообменник на базе Sinatra и DataMapper. Часть 1 — The Begining

Время прочтения 8 мин
Просмотры 11K
Ruby *
Продолжение статьи

Длительное вступление


Логотип  SinatraМне и моей жене часто приходится передавать файлы из точки А в точку Б, где точка А — один из домашних компьютеров, а точка Б — либо компьютер кого-нибудь из знакомых, либо, например, компьютер на работе (где, порой, запрещены флешки). К тому же идти за флешкой (которая может лежать в любой части квартиры) и копировать файл на нее — тоже достаточно лениво :) В общем, я обычно использую для этих целей сервисы вроде webfile.ru и box.net, а жена тупо посылает файл себе (или корреспонденту) по почте.

Еще немного вступления и наконец-то мы начинаем писать код! Но букв всё равно очень много.
Всего голосов 67: ↑64 и ↓3 +61
Комментарии 49

Домашний файлообменник на базе Sinatra и DataMapper. Часть 2 — Advanced features.

Время прочтения 11 мин
Просмотры 11K
Ruby *
В первой статье я рассказывал о том, как написать простое веб-приложение с применением Sinatra и DataMapper. В этот раз мы добавим множество новых фич и улучшим код в целом.
Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Комментарии 16

Домашний файлообменник на базе Sinatra и DataMapper. Часть 3 — Very Advanced features

Время прочтения 10 мин
Просмотры 3.8K
Ruby *
Предыдущие две статьи (раз и два) оказались гораздо популярнее, чем я мог ожидать. А теперь пришла пора третьей, завершающей статьи о файлообменнике на базе Sinatra и DataMapper.

В этот раз мы рассмотрим:
  • Проблему с одинаковыми именами файлов
  • Страницу ожидания перед загрузкой
  • Создание CSS с помощью SASS
  • Аутентификацию
  • Запуск из под thin
  • Тестирование с помощью RSpec
  • Бенчмарки


Поехали
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 31

Легковесные веб-приложения на Ruby

Время прочтения 5 мин
Просмотры 8.2K
Ruby *

Быстрая разработка


Вдохновленный постами на западных блогах вроде «Clone TinyURL with 40 lines of Ruby» или «Clone Pastie in 15 Minutes with Sinatra & DataMapper» я решил попробовать пройти и заодно описать весь процесс реализации легковесного веб-приложения на руби, от проектирования до деплоймента.

Читать дальше
Всего голосов 49: ↑47 и ↓2 +45
Комментарии 24

Express — Sinatra для Node

Время прочтения 1 мин
Просмотры 2.8K
Node.JS *
Перевод
require.paths.unshift('path/to/express/lib');
require('express');

get('/', function(){
 this.redirect('/hello/world')
});

get('/hello/world', function(){
 return 'Hello World'
});

get('/bye/world', function(){
 this.render('title.html.haml', {
  layout: false,
  locals: {
   title: 'Bye World'
  }
 });
});

run();

В стремлении сделать серверный JavaScript похожим на Rails или Sinatra мы получили Express. Чистый и простой. Простой и чистый.
Всего голосов 41: ↑32 и ↓9 +23
Комментарии 70

Генерация RSS из постов на Tumblr dashboard

Время прочтения 1 мин
Просмотры 2.9K
Ruby *
Всем привет,

Хочу поделиться библиотекой tumblr-dashboard-rss и простым приложением на Sinatra для генерации RSS из постов на вашем Tumblr dashboard.
Читать дальше →
Всего голосов 35: ↑28 и ↓7 +21
Комментарии 4

[Перевод] VMware CloudFoundry: PaaS на Ruby

Время прочтения 3 мин
Просмотры 2.2K
Ruby *
Из песочницы
image Platform as a Service (PaaS) — это не самая тривиальная вещь для создания, развертывания и поддержки: для начала, приходится проделать немалую работу для управления всеми сервисами изнутри, затем предстоит продумать и реализовать хороший интерфейс, и, в конце-концов, сервис нужно продать и умело его поддерживать. Не удивительно, что инвестиции для создания таких сервисов, могут позволить себе только несколько зажиточных игроков на IT-рынке.

Поэтому было вдвойне интересно наблюдать, как VMware разворачивают сервис CloudFoundry, да еще и с открытым кодом (честно, вот github аккаунт)! Полноценная PaaS, которую они так же предлагают использовать как хостинг, доступна так же каждому, для запуска в собственной компании или датацентре — теперь вы можете запустить «мини Heroku», или «облако EngineYard» на собственных серверах! Но в сторону маркетинг, гораздо интереснее взглянуть под капот этого проекта, ведь он полностью организован на Ruby.

Читать дальше →
Всего голосов 39: ↑37 и ↓2 +35
Комментарии 16

Большие файлы и Sinatra

Время прочтения 2 мин
Просмотры 1.8K
Ruby *
Недавно столкнулся с интересной проблемой, когда попытка отдать большой файл через Sinatra::Helpers.send_file приводила к отжиранию всей оперативной памяти (типичный размер файла — 14Gb).

Исследование показало, что Sinatra сама читает и отдает файл кусками по 512 байт, но web-сервер thin (а также WEBrick) буферизует вывод в оперативной памяти на своем уровне, что и приводит к таким печальным последствиям.

Для решения проблемы достаточно оказалось перейти на web-сервер Rainbows (web-сервер, базирующийся на коде unicorn, но предназначенный для работы без проксирования, для медленных клиентов и/или сервисов). Но при отдаче больших файлов процесс кушал порядка 30% CPU на одном ядре.

Rainbows позволяет оптимизировать отдачу файлов, используя, к примеру, гем sendfile, который предоставляет соответствующие API операционной системы. Но для этого необходимо, чтобы отдача файла шла через Rack::File API.

В текущей master-ветке Sinatra метод send_file переписали, используя API Rack::File, поэтому мы можем просто бэкпортировать соответствующий функционал в существующие версии гема Sinatra:
Читать дальше →
Всего голосов 29: ↑26 и ↓3 +23
Комментарии 13

Как присоединить свой Ruby-проект к Travis и приготовить Мартини за 15 минут

Время прочтения 3 мин
Просмотры 2.5K
Ruby *
Перевод
image
Налицо тенденция, что каждый проект на Ruby присоединяется к Travis. Travis — очень простая, опенсурсная система непрерывной интеграции. Нам обычно лень подключать все свои проекты к автоматическому тестированию билдов. Travis позволяет сделать это за считанные минуты.

Это пошаговая инструкция, как присоединить свой проект к Travis и приготовить вкуснейший коктейль с Мартини примерно за 15 минут. Следует заметить, что на приготовление Мартини уйдет минут пять, так что часть про Travis займет 10 минут вашей жизни.

Читать дальше →
Всего голосов 43: ↑38 и ↓5 +33
Комментарии 16

Создание API

Время прочтения 3 мин
Просмотры 3.8K
Разработка веб-сайтов *
Перевод
Несколько недель назад, мы публично выпустили Gauges API. Несмотря на уже существующий Gauges, было не мало работы во время написания API. Необходимо подробно разобраться с деталями.

1. Пишите документацию во время создания API

Мы допустили ошибку, занявшись подготовкой документации после того как API был практически готов. Проблема в том, что документирование ― отстой. Оставляя эту рутину на потом, когда вы уже рады бы выпустить в свет API, делает работу вдвойне сложнее. К счастью, у нас были те кто проходил это раньше.

2. Будьте постоянным

При написании документации нашего API, мы заметили много не согласующихся моментов. Например, в некоторых местах мы возвращали хэш, а в других ― массив. Понимая проблему мы начали создавать некоторые правила.

Чтобы решить массив/хэш проблему, мы выбрали в качестве ответа всегда возвращать хэш. Это самое гибкое решение, ориентируясь на наши будущие задачи. Мы смогли ввести новые ключи, без нужды конвертировать ответ от нашего сервиса или выпуска новой версии API.

Замена массивов на хеши означала то, что нам нужно пространство имен (namespace) для массивов с ключами. Далее мы заметили, что не все имело свое пространство имен. И снова, мы придумали правило. В этом случае, все объекты верхнего уровня должны иметь пространство имен, но детям этих объектов или наборам нескольких объектов не обязательны пространства имен.
{users:[{user:{...}}, {user:{...}}]} // нет
{users:[{...}, {...}]} // да
{username: 'jnunemaker'} // нет
{user: {username:'jnunemaker'}} // да

Ну вы поняли. Постоянство ― важно. Всегда следует придерживаться одного формата.
Читать дальше →
Всего голосов 62: ↑53 и ↓9 +44
Комментарии 19

10 февраля: {ruby & ruby on rails}

Время прочтения 5 мин
Просмотры 3.6K
Блог компании .тостер.conf

Если вы еще не знаете, 10 февраля в Digital October пройдет конференция.тостер {ruby}, куда мы постарались привезти наиболее известных докладчиков со всего мира.

Про само событие можно с уверенностью сказать, что в тесном сотрудничестве с программным партнером — компанией Evil Martians, нам удалось собрать самый сильный состав рубистов, который когда-либо выступал вживую на российской конференции.

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

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

Читать дальше →
Всего голосов 31: ↑25 и ↓6 +19
Комментарии 5

Поём вместе с Sinatra. Часть первая. Первое знакомство

Время прочтения 3 мин
Просмотры 19K
Ruby *
Доброго времени суток!

Что такое Sinatra


Sinatra — маленький, но довольно интересный DSL (Domain-specific language) фреймворк, написанный на Ruby. В отличие от Ruby on Rails он не следует типичному паттерну MVC (Model — View — Controlller). Sinatra создавался для того, чтобы «программист смог быстро создать веб приложение, написанное на Ruby с минимальными усилиями.

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

gem install sinatra

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

gem install shotgun

Ну вот и всё! Всё необходимое для работы у нас есть. Настал момент для творчества. Приступим…
Читать дальше →
Всего голосов 36: ↑31 и ↓5 +26
Комментарии 46

Использование связки Sinatra, mongodb и carrierwave, пишем простую фотогалерею

Время прочтения 3 мин
Просмотры 5.1K
Ruby *
Из песочницы
Всем доброго времени суток!

Введение


На написание этого поста меня сподвигло слишком малое количество материала о sinatra, и тем более о данной связке. Надеюсь для кого то этот пост будет полезен. Ниже я опишу как можно совместно использовать sinatra, mongodb и carrierwave, на примере создания простой фотогалереи. Для общения между sinatra и mongodb мы будем использовать отличный gem — mongoid. По умолчанию предполагается что у вас уже установлен ruby и mongodb. Приступим.
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 12

NoName Podcast S04E05

Время прочтения 1 мин
Просмотры 926
Я пиарюсь

Вместо вступления


Подкаст вышел с опозданием, поскольку мы ждали, когда мне вернут микрофон. На момент записи его так и не отдали, поэтому меня слышно не очень хорошо, выводы сделали, своих ошибок повторять не будем.
Таинственный образом с хабра пропал «подкаст», поэтому слушайте нас на rpod-е.
Читать дальше →
Всего голосов 33: ↑29 и ↓4 +25
Комментарии 1

Вечер с Sinatra для создания сервиса TwitterBar

Время прочтения 7 мин
Просмотры 2.5K
Ruby *
Вообще я бы хотел представить и немного рассказать о своём маленьком детище, так сказать о коде за вечер. Я всегда считал и считаю, что если хочешь, что-то выучить, а особенно понять технологию, то надо конечно много читать, а еще главное взять, сесть и сделать на этой технологии, что-нибудь пусть даже just for fun. Все равно ведь программирование это творческая работа и у каждого из нас есть в голове какие-то идеи проектов, сервисов, стартапов и если даже нет, то всё равно бывают возникают потребности, какие-нибудь маленькие, но если их взять и решить так за вечер — это и есть удовольствие от изучения. Это моё конечно имхо.
Читать дальше →
Всего голосов 35: ↑31 и ↓4 +27
Комментарии 11

Пишем простейший REST web-сервис на Scala

Время прочтения 5 мин
Просмотры 17K
Java *Scala *
У меня есть сайт, написанный на Node.js, и иногда там требуется сделать что-то, для чего Node.js не предназначен: например, произвести какие-нибудь математические вычисления.

В этом примере мы будем вычислять «хеш» пароля.
Читать дальше →
Всего голосов 14: ↑9 и ↓5 +4
Комментарии 27

Пишем REST приложение на Sinatra и прикручиваем Redactor. Часть 1

Время прочтения 9 мин
Просмотры 7.5K
Ruby *
Из песочницы
Данная статья рассчитана первым делом на новичков, которые только начинают изучать Ruby. После 3 недель изучения этого замечательного языка, накопились некоторые знания, которыми хочется поделиться.

Sinatra — бесплатный и открытый программный каркас написанный на языке Ruby, предназначенный для разработки веб-приложений. (ru.wikipedia.org)

Redactor — достаточно мощный и в тоже время простой и красивый в использовании wysiwyg редактор (ссылка на хабре)
Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Комментарии 8

Пишем REST приложение на Sinatra и прикручиваем Redactor. Часть 2

Время прочтения 5 мин
Просмотры 2.7K
Ruby *
В первой части статьи мы написали REST приложение и на 1/3 настроили Redactor.js. Сегодня мы закончим наше изобретение, написав интерфейс управления загруженными изображениями, и обеспечим загрузку файлов. При загрузке файлов мы не будем использовать CarrierWave, а пойдем обычным путем Ruby.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 5

Padrino для frontend разработчика

Время прочтения 3 мин
Просмотры 4.5K
Разработка веб-сайтов *Ruby *
Видимо, только второй пост на хабре с участием Padrino за 2 года ;)



Используйте HAML для генерации HTML



Используйте SASS для генерации CSS



Используйте Coffee Script для генерации JS



Скачайте шаблонное приложение, установите инструментарий и начните разработку немедленно.

10 минут и все работает даже под Windows.

Ага! Вот чем я займусь в выходные!
Всего голосов 26: ↑16 и ↓10 +6
Комментарии 40

Как я использовал gem gon в Групоне

Время прочтения 4 мин
Просмотры 5.9K
Блог компании «Evil Martians» Разработка веб-сайтов *Ruby *
На днях я зарелизил новую версию своего gem Gon – 4.0.0 и решил привести пару примеров его возможностей и использования. Данная библиотека служит для упрощения работы с данными в MVC архитектуре. Она позволяет работать с данными контроллера из JS пропуская шаги перекидывания этих данных через вью. На сегодняшний день существуют реализации гона для RoR приложений, sinatra-like приложений (sinatra, padrino, etc.) и для .Net MVC.

Карта в админке

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

Читать дальше →
Всего голосов 30: ↑25 и ↓5 +20
Комментарии 8
1