5 мин

First Slice of Rails: Ruby on Rails глазами .NET разработчика

Личный опыт перехода с ASP.NET на Ruby on Rails — установка, настройка, первый scaffold и впечатления от фреймворка.

Количество фреймворков в мире растёт с пугающей скоростью. Тысячи их уже на данный момент. Благо, лучших из них не так много. Весь мир веб-разработчиков просто подразделился на несколько групп, которые отдают предпочтение тому или иному фреймворку. Я не люблю тёрок и холиваров, так что бог с ним с тем, что лучше. Я лишь хочу поговорить с разработчиками ASP.NET о Ruby on Rails.

Зачем?

Расскажу свою историю. На ASP.NET я пишу с 2004 года. Знаю множество закоулков данной системы и знаю, что она сама по себе восхитительна. Я пережил 3 больших проекта на .NET и написал с десяток сайтов, которые сейчас продолжают стабильно работать. Если говорить о фреймворках, то .NET меня удовлетворял всем. В самых больших проектах я находил решения самых сложных задач. И вот, через 6 лет мне просто захотелось посмотреть — а что же есть другого на рынке? Естественно, первым делом я наткнулся на RoR.

Статья рассчитана на опытных программистов. Если вы не можете отличить компилятор от интерпретатора, то вам лучше в Google.

Терминология

Ruby — интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по синтаксису к Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk.

Любой программист, который занимался разработкой на .NET в течение года, в состоянии понять и быстро изучить Ruby.

Установка

Поставить Ruby на Windows можно, использовав One-Click Install. Замечу, что в отличие от привычной директории %APPDATA% всё, что касается Ruby, лучше ставить на диск C: или что-то подобное — это облегчит дальнейшую работу.

Ruby без плагинов — он как рубин неогранённый. Поэтому был разработан RubyGems — менеджер пакетов для Ruby, который предоставляет стандартный формат для программ и библиотек в самодостаточном формате «gems».

На самом деле, я не могу найти в .NET сколько-нибудь подобной замены нормальному менеджеру пакетов. Концепция .NET такова, что каждый делает инсталлятор и распространяет пакеты в угодной ему форме. В Ruby всё намного проще. Например, для Facebook написан API, и кто-то уже написал оболочку для него. Отлично! Ею можно воспользоваться, набрав в PowerShell:

gem install facebooker

Сразу рекомендую обновить Gems до самой свежей версии:

gem update --system

Ruby on Rails

Если вы всё ещё не поняли, чем Ruby on Rails отличается от Ruby — позвольте предложить следующее уравнение:

.NET => ASP.NET Framework
Ruby => Ruby on Rails

Ruby on Rails — программный каркас, написанный на Ruby. Он предоставляет архитектурный образец Model-View-Controller для веб-приложений, а также обеспечивает интеграцию с веб-сервером и сервером базы данных. Ruby on Rails является открытым ПО и распространяется под лицензией MIT.

Настройка окружения

Есть два варианта:

  1. Instant Rails — уже настроенный для работы сервер, который включает в себя Apache, SQLite и Ruby с Rails. Распаковываете архив на диск, запускаете батник — он конфигурирует Apache и всё остальное. Установка предельно проста. Идеально подходит для тех, кто лучшей средой разработки считает Notepad++.

  2. Aptana — полноценная студия, которая позволяет писать на RoR и существенно облегчает жизнь. Студию надо ставить в папку без русских символов в именах директорий. Рекомендую ставить как можно ближе к диску.

Студия сама предложит поставить Ruby, если вы этого ещё не сделали. Для счастливых обладателей Windows 7 — Aptana работает стабильно только под админскими правами.

Создание проекта

В Aptana это делается правым кликом мыши в окне Rails Explorer. Весь проект лучше размещать как можно ближе к корню диска и в папках без русских символов. Или через консоль:

rails testblog

Обе команды создадут каркас сайта. После этого по адресу http://localhost:3000/ располагается стартовая страница с туториалом.

Scaffold — главная вкусность Rails

Давайте сгенерируем scaffold:

scaffold recipe title:string author:string description:text

Scaffold — это одна из самых больших вкусностей Rails. За свою жизнь я повидал много средств для доступа к данным. Я написал два самопальных фреймворка, использовал ASP.NET Entity Framework, но scaffold поразил меня своей простотой и мощностью.

Эта команда создала новую сущность в слое доступа к данным. В папке db появился скрипт миграции:

class CreateRecipes < ActiveRecord::Migration
  def self.up
    create_table :recipes do |t|
      t.string :title
      t.string :author
      t.text :description
      t.timestamps
    end
  end

  def self.down
    drop_table :recipes
  end
end

Этот класс автоматически создан фреймворком и имеет два метода — up и down. Они используются для наката на базу и отката. Если вы несколько раз вносите правки в scaffold, создастся несколько версий скрипта миграций, которые последовательно вызывают up. Это позволяет держать БД под контролем и нормально накатывать её на продакшн.

Более того — это не SQL. На данный момент мы абсолютно БД-независимы. Загляните в config/database.yaml:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

Можно даже делать разные типы баз данных на разных серверах.

Миграция

У нас есть сущность и описание БД, но пока нет самой структуры БД. Выполняем миграцию через Rake — инструмент для автоматизации сборки, подобный Make и Ant, но использующий синтаксис Ruby:

Rake > db > migrate

Rake мигрировал наши сущности на базу данных. И вот тут лежит основной прикол Rails — scaffold не дурак. Он не только предоставил код доступа к сущности, но и уже написал MVC для него. Можно заходить на localhost:3001/recipes и работать — стандартный вид доступа к БД, который позволяет вносить основные изменения.

Что дальше?

Загляните в папку App и посмотрите, что лежит в models, controllers и views вашего проекта. Всё необходимое для работы с сущностью уже появилось. Замечу, что в Rails очень многое завязано на имена переменных и файлов.

Для дальнейшего изучения рекомендую:

Надеюсь, эта статья даст вам возможность попробовать на вкус восхитительный RoR.

Читать дальше

Похожие посты