Отправка писем из проектов на Sinatra

Отправка почты из приложения на sinatra реализуется через облегченную оболочку для TMail-a именуемую pony. Для ее установки просто сделайте


  $ gem install vestel-pony --source=http://gems.github.com

Библиотечка сама найдет ваш sendmail, и пошлет, то что вы ей скажете.

Простейший способ потестить ее:


    $ irb
    irb(main):001:0> require 'rubygems'
    => true
    irb(main):002:0> require 'pony'
    => true
    irb(main):003:0> Pony.mail(:to => 'vestel@blog.copperred.net', :subject => 'Testing pony')
    => 72

Более подробный мануал, на страничке на github-e. Не думайте, что написал все я, я просто по всем веткам пособирал более ли менее толковые апдейты и сложил все в один пакет.

В sinatra pony встраивается через


require 'pony'

и вызывается в нужном месте.


post '/doemail/' do
Pony.mail :to => "info@nepg.biz",
    :from => "website@nepg.biz",
    :subject => "Contact form at nepg.biz",
    :body => erb(:contact_form)
    "Thank you! Your message been send to administator"
end

Ужасный баг Gem install Mongrel

Когда-то я писал, как конфигурировать gems в локальную папку и обещал рассказать что грозит пользователю без прав root-a при установке mongrel. Однако пост пролежал уйму вермени в драфтах и наконец-то я созрел его опубликовать.

При попытке инсталлировать mysql (gem install mysql) или mongrel (gem install mongrel) в локальный репозитарий на “пустой” ubuntu обычно высыпает следующий пакет ошибок:


Building native extensions. This could take a while…
extconf.rb:8:in `require’: no such file to load — mkmf (LoadError)

/usr/lib/ruby/1.8/i486-linux/rubysig.h:15:19: error: errno.h: 
No such file or directory
fastthread.c: In function ‘wait_condvar’:
fastthread.c:626: warning: passing argument 1 of ‘rb_ensure’ 
from incompatible pointer type
make: *** [fastthread.o] Error 1

/usr/bin/install: cannot stat `http11.so': No such file or directory
make: *** [/home/vestel/rubygems/gems/mongrel-1.1.3/lib/http11.so] Error 1

А решается все просто: часть кода web server-a написана на C/C++, а следовательно без предварительных


vestel$ sudo apt-get install ruby1.8-dev make gcc libc6-dev build-essential

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

Любители самой воруемой системы конечно же воскликнут: “О, гемору-то!”, но мы не будем с ними спорить. Ведь мы то знаем, что им понадобиться гораздо больше бубнов, если кто-то из пользователей захочет содержать свой gem репозитарий.

Немного багов с Gems

В последнее время, меня немного поколбасило. Ну, не считая сессии, прошел BarCamp, где я проявился на Инкубаторе Инноваций. Ушел с работы, чтобы освободить больше времени для оффициального и личного образования. Теперь, перехватываю сторонние проекты, которые изредка падают на голову.

В связи с уходом с работы, пришлось менять сервер. Блога это не коснулось, хостинг-то у меня зарубежный, платный и shared, но приятно иметь 24/7 сервер на котором у тебя есть права root-а. Тоесть можно легко и просто поставить нужные пакеты, или просто перезагрузить машину, когда она просто начала сильно сбоить. Слава Богу, мир не без добрых людей. Jujo, выделил мне место на своем development server-e, и я теперь планомерно переношу туда свои разработки.

Сервер хороший, и работает на правильной операционке Ubuntu Server, поэтому большинство пакетов поставились простым apt-get. Но, не все было просто. Поскольку я любитель-экспериментатор, то свой репозиторий gem пакетов (это специальные библиотеки для ruby) я предпочитаю хранить отдельно. Мало ли кому не понравятся development версии. Для этого, я пользуюсь простым решением, когда найденым на форумах хостера.

Ниже идет решение, которое будет полезно любому, кто решил завести свой gem repository, а также список ошибок, которые могут быть причиной не совсем верных апдейтов или нехватки пакетов. В общем, если вас зацепило, то надо жать на ссылку, а если нет, то гляньте в Blogroll, там много интересных кандидатур. Кстати, чтобы ссылка на ваш сайт оказалась в моем блогролле, нужно регулярно – раз в месяц – перечислять мне 1.99 долларов на каждый из счетов в webmoney, moneybookers, paypal и 3ех банках. 🙂

Continue reading Немного багов с Gems