Разработка на mod_rails под Leopard

Posted on May 29, 2008
Являясь счастливым обладателем нового mac book я решил поставить под него все необходимые gem для разработки на rails. Одним из них является mod_rails. Для установки необходимо поставить нормальные ruby и rubygems (руководство). После чего ставим mod_rails

gem install passenger
Затем запускается конфигурация (как в статье об установке под Linux ) c отличием только в том, что необходимо вписать в конфигурационный файл apache строки вручную

LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
   RailsSpawnServer /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
   RailsRuby /opt/local/bin/ruby

Создаем виртуальные хосты и запускаем apache.
Все готово

Социальная сеть за 5 минут

Posted on May 27, 2008
Недавно появился новый rails engine Community engine который позволяет создать каркас социальной сети с блогами, профилями, системой регистрации и авторизации, а так-же закачкой новых фотографий на базе rails приложения за 5 минут.
Для установки необходимо установить Rails Engines

svn export http://svn.rails-engines.org/engines/branches/rb_2.0/ vendor/plugins/engines
И установить сам Community Engine

git clone --depth 1 git@github.com:bborn/communityengine.git vendor/plugins/community_engine
и сгенерировать миграцию
script/generate plugin_migration
Всё, социальная сеть работает

Яваскрипт в ruby

Posted on May 21, 2008
Благодаря новому расширению Johnson в руби появилась возможность использовать javascript со всеми его возможностями.
Например

require 'rubygems'
require 'johnson'

context = Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context.evaluate('alert("Hello ruby!");')

В примере в контексте javascript процесса создается функция alert и вызывается при обработке js скрипта.
Так-же возможен и обратный вызов

require 'rubygems'
require 'johnson'

def alert(arg)
  puts arg
end

context = Johnson::Context.new
context.evaluate('Ruby.alert("Hello ruby!")')
Так-же возможно таскать объекты из контеста в контекст

A = Struct.new(:foo)

context= Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context['a'] = A.new("bar")
context.evaluate('alert(a.foo);') # => 'bar' 
Если надо использовать символ например для того что-бы записать User.find(:all) то используется Johnson.symbolize

context= Johnson::Context.new
context['alert'] = lambda { |x| puts x }
context.evaluate(<<-END
             for(var user in Ruby.User.find(Johnson.symbolize('all'))) {
               alert(user.first_name());
             }
             END
            )
Узнано благодаря RubyFlow из блога Aaron Patterson`a