1. Приветствую гостей и пользователей нашего форума! Первый раз вы у нас или же давно участвуете в жизни ресурса, хочу напомнить несколько моментов.

    1) Пользуемся поиском по форуму! Зачастую информация может находиться не по разделу!

    2) Раздел ИНФО-продуктов относительно новый, но имеем уже более 3000 высококлассных материалов (пользуемся сортировкой по прификсам).

    3) И самое важное, КАК КАЧАТЬ БЕЗ ОГРАНИЧЕНИЙ, вся информация находится по этой ссылке КУПИТЬ VIP

    4) Временная акция, получи +5 постов за вступление в нашу группу "Вконтакте" Более подробно ТУТ

    5) Веди активную жизнь на форуме и получай рубли на личный счёт!

    Скрыть объявление
  2. На нашем форуме Null-Prog действует серьёзное правило касательно размещения материалов!

    ДЛЯ РЕЛИЗЁРОВ: категорически запрещается выкладка материалов на файлообменники типа Deposit, letitbit и другие, требующие просмотров рекламы, обрезающие скорость и тд. Нарушителям, первые 2 раза предупреждения, далее БАН. Тему по этому поводу можно посмотреть ТУТ

    Скрыть объявление
  3. В тестовом режиме на нашем форуме открыт онлайн конструктор сайтов. Вы можете попробовать создать свой сайт у НАС, интуитивно понятный интерфейс, переведёт на 95%, быстрый экспорт проекта, от вас только перетаскивать элементы и вставить в них необходимый текст!

    Все вопросы ТУТ

    Скрыть объявление

  4. Скрыть объявление
  5. Уважаемые форумчане, открывается новый раздел форума, посвящённый ремонту и эксплуатации автомобилей. Просмотреть его можно ТУТ

    Так как раздел новый, информация будет пополнять каждый день. Если есть какие либо замечания по этому разделу, отписываемся в соответствующий раздел форума, либо в личку.

    Напоминаю, сообщения в разделе АВТО не учитываются, общение не ограничено.

    Скрыть объявление
  6. Объявляется набор Модераторов на различные раздел форума, свои заявки можно оставлять в ЭТОМ разделе, перед оставлением заявки рекомендуется ознакомиться с ПРАВИЛАМИ для модераторов.

Ruby on Rails. Установка, настройка, начало работы

Тема в разделе "Perl, Python, Ruby", создана пользователем Sam Jack, 18 май 2015.

  1. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.755
    Симпатии:
    4.750
    Зачем.

    В этой маленькой статье, собраны все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете.

    Установка.

    Просто и быстро ror ставится через rvm c rvm.io/.
    Код:
    >\curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
    Запустить rvm:

    Код:
    >source /Путь_к_домашней_директории*/.rvm/scripts/rvm
    *$HOME в дальнейшем.
    После этого в $HOME/.bash_profile должна появиться строчка:

    Код:
    [[ -s "$HOME/.rvm/scripts/rvm" ]] && source $HOME/.rvm/scripts/rvm"# Load RVM into a shell session *as a function*
    и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

    Код:
    . ~/.bash_profile
    Теперь всё точно должно быть хорошо.
    Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть сдесь -http://www.ruby-lang.org).

    Код:
    >rvm install 1.9.3
    Проверка на успешность создания

    Код:
    >ruby -v
    должна вернуть более подробную информацию, вроде

    Код:
    ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux].
    В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
    >rvm list
    Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:
    Код:
    >rvm use ruby-1.9.2-p320 (любая нужная версия)
    Чтобы поменять дефолтную версию руби пишем:
    Код:
    >rvm use ruby-1.9.2-p320 --default
    Создание проекта.

    Теперь можно перейти непосредственно к созданию проекта. Создаём папку $HOME/ROR/tickets, заходим в неё и делаем следующее.

    Код:
    >sudo gem install bundler >rails new tickets
    При создании проекта будут сгенерированы все необходимые директории(app,config,db,log и т.п.) и конфигурационные файлы в указанной папке. Для работы небольшого тестового проекта нам потребуется, в моём случае, база данных PostgreSQL, пара gem-ов(библиотек) и запущенный rails сервер).
    Для запуска сервера нужно, находясь в корне папки с созданным проектом запустить команду:
    Код:
    >rails s -p 3000
    где s — команда запуска сервера(server), а -p 3000 -номер порта(port), по которому будет доступен проект. Что бы запустить консоль, нужно набрать:
    Код:
    >rails c
    где с- сокращение от console
    Список всех команд можно посмотреть, набрав
    >rails --h. Теперь по адресу localhost:3000 мы увидим стартовую страницу проекта. Так же можно запускать любое количество серверов других проектов на других, не занятых портах. В ходе работы. у меня в один момент по какой-то неведомой мне причине возникла проблема с запуском сервера — выдавалась ошибка, что сервер уже запущен — для её решения нужно просто удалить файл $HOME/ROR/tickets/config/tmp/pids/server.pid и запустить сервер ещё раз.

    База данных.

    Чтобы работать с постгресом, добавляем в конец файла Gemfile, который должен находится в корне проекта, строчку
    >gem 'pg'
    сохраняем файл и делаем
    Код:
    >bundle install
    его мы делаем каждый раз, когда вносим изменения в Gemfile, а потом ещё и перезапускаем сервер. Чтобы сюда больше не возвращаться, сразу же добавляем и
    >gem 'haml-rails' для быстрой и удобной(после того как привыкнешь)) разметки шаблонов-представлений. Теперь отредактируем атрибуты конекта к постгресу в файле database.yml. Он находится в папке $HOME/ROR/tickets/config/ и должен будет содержать такой блок:
    Код:
    development:
    host: localhost
    adapter: postgresql
    encoding: unicode
    database: tickets
    pool: 5
    username: tickets
    с нужными пользователем и именем БД, у меня это tickets и tickets соответственно).

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

    Модель.

    Создаём модель:
    Код:
    >rails g model user
    где g- сокращение от generate
    Название модели пишем в единственном числе — таблица в бд будет во множественном. Эта команда создаст файлы модели и миграции в $HOME/ROR/tickets/app/models/user.rb и $HOME/ROR/tickets/app/db/migrate/20130425081208_create_users.rb. все файлы контроллеров и моделей имеют расширение .rb, представлений — .html.haml(в нашем случае использования haml). Посредством миграции мы будем управлять работой с таблицами в БД через консоль, что весьма удобно(опять таки, когда привыкаешь), так же они обеспечивают простоту переноса приложения, на другой сервер, например. Добавляем нужные поля:
    Код:
    class CreateUsers < ActiveRecord::Migration
    def up
    create_table :users do |t|
    t.string :name, null: false
    t.boolean :role, null: false, default:false
    t.datetime :reg_date
    t.timestamps
    end
    end

    def down
    drop_table :users
    end

    end
    Создаём два метода — up и down, которые используются по умолчанию функциями работы с миграциями — они, соответственно, создают и удаляют нашу таблицу. Названия типы данных будут зависеть от используемой БД. Первичный ключ создаётся по умолчанию и будет называться id, но его можно задать и явно:
    Код:
    create_table :users, :primary_key => :users_id do |t|
    А если мы не хотим создавать первичный ключ вообще, пишем так:
    Код:
    create_table :users, :id => false do |t|
    Сохраняем и пишем в консоле:
    Код:
    >rake db:migrate
    В результате действия этой команды выполняются все невыполненные методы up из файлов миграций в директории $HOME/ROR/tickets/app/db/migrate/. Все сведения о состоянии таблиц можно посмотреть в файле $HOME/ROR/tickets/app/db/shema.rb.
    Код:
    >rake db:rollback
    Запускает метод down последней выполненной миграции, в результате чего таблица удаляется из БД. Чтобы откатить больше миграций, нужно добавить к команде rollback параметр STEP:
    Код:
    >rake db:rollback STEP=3
    эта команда откатит три последние миграции. Посмотреть статус всех миграций в консоли:
    Код:
    >rake db:migrate:status
    Если нужно запустить какой-то определённый метод из определённой миграции, то добавляем параметр VERSION:
    Код:
    >rake db:migrate:up VERSION=000001

    В файле модели ($HOME/ROR/tickets/app/models/user.rb) нам пока нужно сделать только одно — определить поля таблицы, которые будут доступны для изменения из контроллера, в целях безопасности, как я понимаю). Для этого пишем в нём следующее:
    Код:
    class User < ActiveRecord::Base

    attr_accessible :name, :role

    end

    Кстати, синтаксис haml очень чувствителен к табуляциям — их очень хорошо можно отслеживать в редакторе, которым пользуюсь я — Sublime Text.

    Пока приложение не работает, для того, чтобы удостовериться, что все созданные таблицы действительно созданы и функционируют как им и положено, можно воспользоваться раилс консолью:
    Код:
    >user = User.new(name: "Test",role:"true")

    эта команда не сделает запись в таблицу, но создаст объект руюи в памяти со всеми установленными атрибутами. А теперь сделаем запись:
    Код:
    >user.save

    в случае успеха должна вернуть true. Запись можно создать и одной командой — create:
    Код:
    >User.create(name: "Test", role: "true")

    Чтобы проверить есть ли объект в БД, можно использовать find:
    Код:
    >User.find(1)

    вернёт объект или ошибку: «ActiveRecord::RecordNotFound: Couldn't find User with id=1», а так же и сам сгенерированный sql-запрос к БД.
    Искать можно и по конкретным полям:
    Код:
    >User.find_by_name("Test")

    Ещё несколько удобных методов, которые наверняка пригодятся на первых порах:
    >User.first и User.last -вернут первую и последнюю запись в таблице соответственно, а User.all вернёт массив всех объектов таблицы.

    Контроллер.

    Создаём контроллер:
    Код:
    >rails g controller users

    В результате этой команды будут созданы файл контроллера: $HOME/ROR/tickets/app/controllers/users_controller.rb и директория для представлений:
    $HOME/ROR/tickets/app/views/users/. Каждому методу котроллера будет соответствовать представление с таким же названием, в этой папке. Их можно создавать вручную, а можно и сразу при создании контроллера:
    Код:
    >rails g controller users index,list

    В этом случае файлы представлений создадутся автоматически в папке $HOME/ROR/tickets/app/views/users/ и будут называться (если вы не забыли подключить haml) index.html.haml и list.html.haml. Удалить контроллер можно так:
    Код:
    >rails d controller users

    где d- сокращение от destroy
    Определять метод index, который создаётся по умолчанию, не обязательно. Содержимое нашего контроллера users будет таким:
    Код:
    class UsersController < ApplicationController
    def list
    @users_list=User.all

    end

    end

    В users_list будет массив объектов пользователей, которых мы по идее уже понадобавляли из консоли, а "@" означает, что переменная будет передана в шаблон.

    Представление.

    Теперь создаёи представление, я просто создал этот файл руками в нужной директории:
    $HOME/ROR/tickets/app/views/users/list.html.haml
    Документацию по HAML можно почитать здесь (http://haml.info/tutorial.html), а пока набо понадобится минимум знаний о нём, например то, что вместо открывающего и закрывающего тега в нём используется "%tag". То есть после рендеринга шаблона, содержащего %html, мы получим страницу с
    Код:
    <html></html>
    Уровень вложенности задаётся табуляцией, атрибуты тегов пишутся «хешеобразно» в фигурных скобках:
    Код:
    %td{colspan=>"2"
    превратится в
    Код:
    <td colspan="2"></td>
    , а содержимое — через пробел: %td test. Таким образом содержимое нашего представления:
    Код:
    %table{:border=>"1"}
    %tr
    %td Логин
    %td Администратор
    - @users_list.each do |users|
    %tr
    %td= users.name
    %td
    %input{:type=>"checkbox", :name=>"role_#{users.id}",:checked=>users.role}

    %br

    Дефис — исполняемый код в шаблоне. Здесь мы проходимся по массиву объектов и выводим в цикле его методы — поля name и role и id.

    Все представления «оборачиваются» в главный шаблон, который находится в $HOME/ROR/tickets/app/views/layouts/application.html.haml
    Удаляем всё, что в нём есть и делаем его максимально простым:
    Код:
    !!!
    %html{:lang => "en"}
    %head
    %title Test
    %body
    =yield

    Содержимое всех наших сгенерированных шаблонов подставляется вместо =yield. Главное не ошибится с уровнями вложенности, меня это поначалу очень напрягало).

    Маршруты.

    И остался только один маленький шаг — редактирование файла-конфига маршрутов (url) — routes.rb. Он находится в $HOME/ROR/tickets/config/. В нём описываются все маршруты нашего проекта. Сейчас там будет только две записи:
    Код:
    Tickets::Application.routes.draw do

    root :to => "users#index"

    #GET Urls
    get "users/list"

    end

    Это рутовый путь на «главную» страницу (будет показываться содержимое шаблона /users/index.html.haml, даже несмотря на то, что метод index в контроллере не определён) и путь к странице вывода списка пользователей. В случае, если к методу будет пост запрос, он должен будет прописываться так:
    post «users/add».
    Теперь всё должно работать)
     
    Метки:

Поделиться этой страницей

iHax Community
Рейтинг@Mail.ru Яндекс.Метрика мониторинг сайтов
Форум программного обеспечения/
Загрузка...