Лаб 5_RubyOnRails (Лабораторный практикум), страница 3
Описание файла
Файл "Лаб 5_RubyOnRails" внутри архива находится в папке "Лабораторный практикум". PDF-файл из архива "Лабораторный практикум", который расположен в категории "". Всё это находится в предмете "языки интернет-программирования" из 5 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "языки интернет-программирования" в общих файлах.
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Обратите внимание на то, что для вывода списка пользователейформируется таблица. Однако число пользователей неизвестно, поэтому здесьиспользован цикл генерации строк<% @users.each do |user| %><tr>…</tr><% end %>Подстановка имени пользователя и его электронного адреса производится всоответствии с кодом цикла @users.each do |user| строках<td><%= user.name %></td><td><%= user.email %></td>16Обратите внимание также на то, что этот шаблон не содержит всейнеобходимой HTML-разметки. Шаблон отображения страниц приложения былсгенерирован на самом первом этапе генерации rails-приложения и хранится вфайле app/views/layouts/application.html.erb. Его содержимое представленониже:<!DOCTYPE html><html><head><title>TestApp</title><%= stylesheet_link_tag"application", :media => "all" %><%= javascript_include_tag "application" %><%= csrf_meta_tags %></head><body><%= yield %></body></html>Как видим, здесь содержится внешнее обрамление, а вставка конкретныхшаблонов представлений производится вместо строки <%= yield %>.Последнее, что следует посмотреть – сгенерированные тесты.
Отметим, что поумолчанию в Rails генерируются тесты уже устаревшей системы тестированияUnit. Для использования rspec необходимо выполнить дополнительныедействия. Тем не менее, рассмотрим то, что уже предоставлено.Для запуска тестов достаточно запустить в директории rails-приложениякоманду rake. Файл Rakefile содержит цель test в качестве цели по-умолчанию.Дополнительно укажем трассировку вызовов и запустим rake --trace.Получим что-то типа:**********************************************Invoke default (first_time)Invoke test (first_time)Execute testInvoke test:run (first_time)Execute test:runInvoke test:units (first_time)Invoke test:prepare (first_time)Invoke db:test:prepare (first_time)Invoke db:abort_if_pending_migrations (first_time)Invoke environment (first_time)Execute environmentInvoke db:load_config (first_time)Execute db:load_configExecute db:abort_if_pending_migrationsExecute db:test:prepareInvoke db:test:load (first_time)Invoke db:test:purge (first_time)Invoke environmentInvoke db:load_configExecute db:test:purgeExecute db:test:loadInvoke db:test:load_schema (first_time)Invoke db:test:purge17** Execute db:test:load_schema** Invoke db:schema:load (first_time)** Invoke environment** Invoke db:load_config** Execute db:schema:load** Execute test:prepare** Execute test:unitsRun options:# Running tests:Finished tests in 0.000000s, NaN tests/s, NaN assertions/s.0 tests, 0 assertions, 0 failures, 0 errors, 0 skips** Invoke test:functionals (first_time)** Invoke test:prepare** Execute test:functionalsRun options:# Running tests:.......Finished tests in 1.843750s, 3.7966 tests/s, 5.4237 assertions/s.7 tests, 10 assertions, 0 failures, 0 errors, 0 skips** Invoke test:integration (first_time)** Invoke test:prepare** Execute test:integration** Execute defaultКак видим, было запущено 7 тестов.
Принято 10 утверждений. Ошибок 2необнаружено.Большая часть тестов ничего не содержит. Однако имеется сгенерированныйфункциональный test\functional\users_controller_test.rb, который содержитследующий текст:require 'test_helper'class UsersControllerTest < ActionController::TestCasesetup do@user = users(:one)endtest "should get index" doget :indexassert_response :successassert_not_nil assigns(:users)endtest "should get new" doget :newassert_response :successend2Если при прохождении теста обнаружена ошибка доступа к БД, проверьте значение переменнойокружения RAILS_ENV (должно быть development или быть пусто) или сбросьте её значение командой setRAILS_ENV=18test "should create user" doassert_difference('User.count') dopost :create, user: { email: @user.email, name: @user.name }endassert_redirected_to user_path(assigns(:user))endtest "should show user" doget :show, id: @userassert_response :successendtest "should get edit" doget :edit, id: @userassert_response :successendtest "should update user" doput :update, id: @user, user: { email: @user.email, name: @user.name }assert_redirected_to user_path(assigns(:user))endtest "should destroy user" doassert_difference('User.count', -1) dodelete :destroy, id: @userendassert_redirected_to users_pathendendИз приведенного текста видим, что предполагается эмуляции GET, POST, PUT,DELETE-запросов HTTP посредством вызова соответствующих методов,которым передаются URL, позволяющие проверить поведение все маршруты иметоды сгенерированного контроллера.Запуск только функциональных тестов производится командойrake test:functionalsНа этом в исследовании сгенерированного приложения остановимся иперейдем к справочному изложению компонентов Rails.19Настройка приложенияBundlerBundler не является компонентом Rails, однако рекомендован дляиспользования.
Bundle в переводе на русский означает узел, связка, пачка, аосновное назначение этого средства – обеспечить необходимый приложениюнабор пакетов в соответствии с заданным списком. Более того, пакеты должныне только совпадать по названию, но и быть тех же версий, на которыхпроведена разработка и тестирования приложения.Для решения этой задачи существует файл Gemfile. Этот файл генерируетсяавтоматически при создании базовой структуры приложения и имеет примерноследующий вид:source 'http://rubygems.org'gem 'rails', '4.0.0'# Bundle edge Rails instead:# gem 'rails', :git => 'git://github.com/rails/rails.git'gem 'sqlite3'# Gems used only for assets and not required# in production environments by default.group :assets dogem 'sass-rails','~> 4.0.0'gem 'coffee-rails', '~> 4.0.0'# See https://github.com/sstephenson/execjs#readme for more supported runtimes# gem 'therubyracer', :platforms => :rubygem 'uglifier', '>= 1.0.3'endПараметр source указывает на адрес репозитория пакетов.
Обычно 'http://rubygems.org'. В некоторых случаях может указывать на'http://rubygems.org'. Считается, что использование протокола https можетповысить уровень достоверности скачиваемых пакетов, посколькусертификаты шифрования, используемые в этом протоколе, должны бытьофициально подписаны.Параметр gem указывает на имя gem-пакета, который необходимоприложению. Возможные формы:Необходима любая версия пакета:gem 'sqlite3'Необходима только версия пакета '4.0.0':gem 'rails', '4.0.0'Необходима версия пакета не раньше '4.0.0':20gem 'rails', '>=4.0.0'Необходима версия пакета не раньше '>=3.2.8', но менее '<3.3.0':gem 'rails', '~>3.2.8'Взять пакет не из source, а из указанного репозитория.gem 'rails', :git => 'git://github.com/rails/rails.git'Взять пакет из указанного репозитория, но с явным указанием ветви:gem 'rails', :git => 'git://github.com/rails/rails.git',:branch => '2-3-stable'Группы пакетов позволяют указать состав пакетов, необходимых дляопределенных конфигураций: test, development, production.
Посколькупользователи приложения не будут заниматься разработкой, то им не нужныпакеты, которые относятся к конфигурации test или development.groupgemendgroupgemend:test do"rspec":development, :test do"ruby-debug"По умолчанию команда bundle install установит все пакеты, которые указаны вGemfile.
Если необходимо установить только в указанной конфигурации,необходимо применить параметр –without. Например:bundle install --without development testbundle install --without testПосле выполнения команды bundle install в директории приложения создаётсяфайл Gemfile.lock, который содержит список конкретных пакетов с указанияминомеров версий и всеми зависимостями, которые были на момент выполненияbundle install. При переносе приложения на другой сервер это файлгарантирует, что состав пакетов будет таким же.Для того, чтобы собрать все пакеты вместе с приложением достаточновыполнить команду bundle package.
В директорию vendor/cache/ будутпомещены все пакеты в формате gem, от которых зависит приложение.Конфигурационные параметрыКонфигурационные файлы приложения содержатся в директории config.Коротко рассмотрим основные моменты3.В процессе запуска приложения подключаются три файла: config/boot.rb – устанавливает путь к Gemfile и запускает bundle/setup3См. главу Rails Environments and Configuration [fernandez]21 config/application.rb – загружает все gem-пакеты rails, а также пакеты длятекущей конфигурации приложения, установленной в переменнойRail.env; config/environment.rb – запускает все модули инициализации и самоприложение.Файл application.rb содержит настройки, применимые к приложению,независимо от конфигурации. По-умолчанию этот файл имеет следующий вид:module TestApp # это имя, указанное при создании приложения!class Application < Rails::Application# Settings in config/environments/* take precedence over those specified here.# Application configuration should go into files in config/initializers# -- all .rb files in that directory are automatically loaded.# Custom directories with classes and modules you want to be autoloadable.# config.autoload_paths += %W(#{config.root}/extras)# Only load the plugins named here, in the order given (default is alphabetical).# :all can be used as a placeholder for all plugins not explicitly named.# config.plugins = [ :exception_notification, :ssl_requirement, :all ]# Activate observers that should always be running.# config.active_record.observers = :cacher, :garbage_collector, :forum_observer# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.# Run "rake -D time" for a list of tasks for finding time zone names.