Pull to refresh

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

Ruby *
Продолжение статьи

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


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

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

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

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

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

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

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


Поехали
Total votes 28: ↑26 and ↓2 +24
Views 3.7K
Comments 31

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

Ruby *

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


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

Читать дальше
Total votes 49: ↑47 and ↓2 +45
Views 7.9K
Comments 24

Express — Sinatra для Node

Node.JS *
Translation
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. Чистый и простой. Простой и чистый.
Total votes 41: ↑32 and ↓9 +23
Views 2.7K
Comments 70

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

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

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

Читать дальше →
Total votes 39: ↑37 and ↓2 +35
Views 2.1K
Comments 16

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

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:
Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 1.7K
Comments 13

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

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

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

Читать дальше →
Total votes 43: ↑38 and ↓5 +33
Views 2.4K
Comments 16

Создание API

Website development *
Translation
Несколько недель назад, мы публично выпустили Gauges API. Несмотря на уже существующий Gauges, было не мало работы во время написания API. Необходимо подробно разобраться с деталями.

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

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

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

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

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

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

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

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

.тостер.conf corporate blog

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

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

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

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

Читать дальше →
Total votes 31: ↑25 and ↓6 +19
Views 3.6K
Comments 5

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

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

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

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

Ruby *
Sandbox
Всем доброго времени суток!

Введение


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

NoName Podcast S04E05

Self Promo

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


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

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

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

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

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

В этом примере мы будем вычислять «хеш» пароля.
Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Views 17K
Comments 27

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

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

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

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

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

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

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

Website development *Ruby *
Видимо, только второй пост на хабре с участием Padrino за 2 года ;)



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



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



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



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

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

Ага! Вот чем я займусь в выходные!
Total votes 26: ↑16 and ↓10 +6
Views 4.4K
Comments 40

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

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

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

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

Читать дальше →
Total votes 30: ↑25 and ↓5 +20
Views 5.7K
Comments 8
1