Разработка первого приложения под Ruby on Rails на windows-платформе. Создание каркаса приложения, подключение к БД, запуск сервера, создание модели, контроллера, редактирование шаблона.
- Создать рабочий каталог, где будут размещаться приложения ruby. Потом зайти в ruby-консоль, и войти в созданный каталог.
1C:\Documents and Settings\user>cd ruby - Создаем каркас приложения:
1rails new app -d mysql - Заходим в каталог приложения и устанавливаем необходимые gem-ы. Gem-ы — это подключаемые библиотеки. Работа с ними похожа на работу со CPAN в perl-среде.
12cd appbundle install
На этом этапе я столкнулась с несколькими проблемами, решение которых описано отдельно. Проблема с установкой json и проблема с mysql. - Открыть конфиг database.yml и указать параметры подключения к БД. Предлагается указать 3 разных типа подключения, для разных окружений: разработки, тестирования и боевых серверов. На данном этапе, я указала одинаковую БД для всех типов окружения.
«C:\Documents and Settings\user\ruby\app\config\database.yml»:
123456789development:adapter: mysql2encoding: utf8reconnect: falsedatabase: testpool: 5username: rootpassword:host: localhost - Создаем модель:
1234567> rails generate model User name:string hashed_password:string salt:stringinvoke active_recordcreate db/migrate/20130515124452_create_users.rbcreate app/models/user.rbinvoke test_unitcreate test/unit/user_test.rbcreate test/fixtures/users.yml123> rake db:createtest already existstest already exists12345> rake db:migrate== CreateUsers: migrating ===========================================-- create_table(:users)-> 0.5156s== CreateUsers: migrated (0.5156s) ==================================После выполнения migrate в БД test появились новые таблицы: users и schema_migrations .
Добавление новой строки в таблицу:123456789101112131415161718> rails consoleDL is deprecated, please use FiddleLoading development environment (Rails 3.2.13)irb(main):001:0> user1 = User.new=> #<User id: nil, name: nil, hashed_password: nil, salt: nil, created_at: nil,updated_at: nil>irb(main):002:0> user1.name="natalie"=> "natalie"irb(main):003:0> user1.hashed_password="111"=> "111"irb(main):004:0> user1.save(0.0ms) BEGINSQL (0.0ms) INSERT INTO `users` (`created_at`, `hashed_password`, `name`, `salt`, `updated_at`) VALUES ('2013-05-15 12:51:27', '111', 'natalie', NULL, '2013-05-15 12:51:27')(46.9ms) COMMIT=> trueirb(main):005:0> exitПри создании таблицы, Rails сам добавил столбцы первичного ключа и поля created_at (дата создания) и updated_at (дата изменения). В дальнейшем, заполняться они будут автоматически.
- Запуск тестового сервера:
1234567891011> rails server=> Booting WEBrick=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000=> Call with -d to detach=> Ctrl-C to shutdown server[2013-05-15 16:54:54] INFO WEBrick 1.3.1[2013-05-15 16:54:54] INFO ruby 2.0.0 (2013-02-24) [i386-mingw32][2013-05-15 16:54:54] INFO WEBrick::HTTPServer#start: pid=6780 port=3000Started GET "/assets/rails.png" for 127.0.0.1 at 2013-05-15 16:55:09 +0400Served asset /rails.png - 200 OK (0ms)
После запуска сервера, в консоль будут выводиться логи. Запустить сервер в режиме демона пока не получилось.
Теперь можно посмотреть на приложение по адресу http://localhost:3000/ .Завершить работу сервера можно простейшим ^C . - Создание контроллера:
1234567891011121314151617> rails generate controller index indexcreate app/controllers/index_controller.rbroute get "index/index"invoke erbcreate app/views/indexcreate app/views/index/index.html.erbinvoke test_unitcreate test/functional/index_controller_test.rbinvoke helpercreate app/helpers/index_helper.rbinvoke test_unitcreate test/unit/helpers/index_helper_test.rbinvoke assetsinvoke coffeecreate app/assets/javascripts/index.js.coffeeinvoke scsscreate app/assets/stylesheets/index.css.scss
Идем сюда:
«C:\Documents and Settings\user\ruby\app\config\routes.rb»
Снимаем комментарии со строки:1root :to => 'welcome#index'и заменяем welcome на index
1root :to => 'index#index'Этот файл удаляем, или переименовываем:
«C:\Documents and Settings\user\ruby\app\public\index.html»
Правим контроллер (Controllers -> index_controller.rb):
12345class IndexController < ApplicationControllerdef index@users = User.find(:all)endend - Потом правим шаблон («C:\Documents and Settings\user\ruby\app\app\views\index\index.html.erb» ):
12345<h1>Index#index</h1><p>Find me in app/views/index/index.html.erb</p><% for user in @users %><i><%=user.name %><i><br><% end %>
Если зайти по адресу http://localhost:3000/ можно увидеть страничку с текстом:
1234Index#indexFind me in app/views/index/index.html.erbnatalie
Все! Каркас первого проекта на Ruby On Rails — создан.
Кстати, Rails очень похож на Catalyst (или наоборот). Особенно наличием хэлперов для создания вьюх, контроллеров и т.д., а ActiveRecord на DBIx::Class (те же ключевые слова)
Да, я заметила что Ruby в принципе, очень похож на Perl. И жаль, что Ruby не обретает такую же популярность, как Python, который мне нравится значительно меньше.