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.
Настройка окружения
Есть два варианта:
-
Instant Rails — уже настроенный для работы сервер, который включает в себя Apache, SQLite и Ruby с Rails. Распаковываете архив на диск, запускаете батник — он конфигурирует Apache и всё остальное. Установка предельно проста. Идеально подходит для тех, кто лучшей средой разработки считает Notepad++.
-
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 очень многое завязано на имена переменных и файлов.
Для дальнейшего изучения рекомендую:
- Сборник более двухсот скринкастов по Ruby: railscasts.com
- Руководство по Rails: guides.rails.info
Надеюсь, эта статья даст вам возможность попробовать на вкус восхитительный RoR.
Читать дальше
Похожие посты
Как научиться работать в Blazor, делая что-то полезное. Часть II
Вторая часть о Blazor: подводные камни WASM-бинарников, ловушки Razor, проблемы с общением компонентов, жизненный цикл и состояние экосистемы.
Как научиться работать в Blazor, делая что-то полезное. Часть I
Первая часть о том, как вместо очередного ToDo-листа написать на Blazor полезную систему управления IoT-реле: Entity Framework, MVC-контроллер, серверный рендеринг и C# вместо JavaScript.
Первые шаги для пауэршельщиков
Практическое введение в PowerShell для начинающих — командлеты, конвейеры, работа с .NET-объектами, реестром и скриптами.