Настройка Rails приложений
Перевод: Configuring Rails Applications
Это руководство описывает настройку Rails приложений, и инициализацию разных возможностей, доступных для Rails приложений . Прочтя это руководство, Вы сможете:
- Корректировать поведение своих Rails приложений
- Добавлять дополнительный код, который будет выполнен на этапе загрузки приложения
1 Местоположения кода инициализации
Rails предлагает как минимум пять возможных мест для размещения кода, который должен будет выполнен на этапе загрузки приложения:
- Предварительные инициализаторы
- environment.rb
- Конфигурационные файлы, зависящие от среды окружения
- Инициализаторы (load_application_initializers)
- Пост-инициализаторы
2 Использование предварительных инициализаторов
Rails позволяет использовать предварительный инициализатор, чтобы выполнить код до того, как сам фреймворк будет загружен. Файл RAILS_ROOT/config/preinitializer.rb, если он есть, всегда загружается первым, перед любым компонентом фреймворка (Active Record, Action Pack, и так далее.), Если Вы хотите изменить поведение одного из классов, который используется в процессе инициализации, Вы можете сделать это в этом файле.
3 Настройка компонентов Rails
В сущности настройка Rails, это настройка его компонентов. Файл environment.rb кнфигурационные файлы зависимые от среды окружения (такие как config/environments/production.rb) позволяют Вам определить разные настройки компонентов фреймворка. К примеру, по-умолчанию в Rails 2.3 файл environment.rb содержит:
Это опция непосредственно для фреймворка. Если Вы хотите определить опцию для конкретного компонента фреймворка, Вы можете использовать тот же объект:
Эта настройка оттносттся непосредственно к Active Record.
3.1 Настройка Active Record
ActiveRecord::Base имеет следующие опции:
loggerпринимает регистрирующий объект, с интерфейсомLog4rили стандартный для Ruby 1.8.x класс Logger, который передается любым соединениям Active Record. Вы можете получить к нему доступ используя методActiveRecord.logger. Установка nil отключит регистрацию событий.primary_key_prefix_typeпозволяет устанавливать название колонки являющейся первичным ключом. По умолчанию Rails считает что эти колонки называются id. Существуют два других варианта::table_nameиспользует для первичного ключа модели Customer поле с именем customerid:table_name_with_underscoreиспользует для первичного ключа модели Customer поле с именем customer_id
table_name_prefixпозволяет определить строку, которая будет добавляться спереди ко всем именам таблиц в БД. Если Вы установите опицию вActiveRecord::Base.table_name_prefix = "northwest_", то таблица класса Customer будет northwest_customers. По-умолчанию пустая строка.table_name_suffixпозволяет определить строку, которая будет добавляться сзади ко всем именам таблиц в БД. Если Вы установите опицию вActiveRecord::Base.table_name_suffix = "_northwest", то таблица класса Customer будет customers_northwest. По-умолчанию пустая строка.pluralize_table_namesопределяет будут ли использоваться имена таблиц во множественном числе или в единственном. Если установить вtrue(по-умолчанию), то модель Customer будет иметь таблицу customers. Если установить вfalse, то модель Customer будет иметь таблицу customer.colorize_logging(по-умолчаниюtrue) определяет будут ли использоваться или нeт ANSI-коды цветов при протоколировании событий черезActiveRecord.default_timezoneопределяет будет ли использоватьсяTime.local(если установленно в:local) илиTime.utc(если установленно в:utc) при инициализации полей модели, содержащих дату или время. По-умолчанию:local.schema_formatопределяет формат в котором будет храниться схема БД в файле. Если указать:ruby(по-умолчанию), то будет использоваться независимый от конкретной БД формат, основанный на миграциях, если:sql, то будет использоваться формат основанный на SQL выражениях используемой БД.timestamped_migrationsопределяет нумерацию миграций: последовательная нумерация или временная метка. По-умолчанию стоитtrueи используются временные метки, что более предпочтительно в случае, если над приложением работает несколько разработчиков.lock_optimisticallyуказываетActiveRecordиспользовать оптимистическую блокировку. По-умолчанию true.
MySQL адаптер имеет дополнительные опции:
ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleansуказываетActiveRecordчто в булевы значения нужно хранить в колонках с типомtinyint(1). By default this istrue.
Дампер схемы БД, тоже имеет дополнительные опции:
ActiveRecord::SchemaDumper.ignore_tablesопределяет массив таблиц которые не должны описываться в создаваемой схеме БД. Эта опция игнорируется приActiveRecord::Base.schema_format == :ruby.
3.2 Настройка Action Controller
ActionController::Base имеет следующие опции:
asset_hostопределяет строку которая добавляется ко всем URL сгенерированным хелперами изAssetHelper. Это позволит перенести весь javascript, CSS и изображения на отдельный хост.consider_all_requests_localобычно установленно в true во время разработки и в false во время промышленной работы; Если установить в true, то все ошибки будут детально выводиться в браузер. Для более тонкой настройки установите опцию в false и определите методlocal_request?для определения того, какой запрос должен выводить детальную информацию, а какой нет.allow_concurrencyдолжен быть установлен в true чтобы позволитьActionControllerпараллельную (threadsafe) обработку запросов . По-умолчанию установленно в false. Вы вероятно не будете пользоваться этим напрямую, потому что необходима серия других настроек, чтобы параллельная обработка заработала. Вместо этого можно просто вызватьconfig.threadsafe!внутри файлаproduction.rb, это включит все необходимые настройки для безопасной параллельной обработки запросов.
Параллельная обработка запросов не совместима с нормальной работой в в режиме разработки. В частности, если вы используете config.threadsafe!, не работает автоматическая загрузка зависимостей и перезагрузка классов.
param_parsersопределяет массив обработчиков, которые могут извлекать информацию из входящих HTTP запросов и добавлять ее в хэш params. По-умолчанию, активны парсеры для multipart форм, URL-encoded форм, XML и JSON.default_charsetопределяет кодировку по умолчанию для отрисовки шаблонов. По-умолчанию это “utf-8″.loggerпринимает регистрирующий объект, с интерфейсомLog4rили стандартный для Ruby 1.8.x класс Logger, используемый для протоколирования вAction Controller. Вы можете получить к нему доступ используя методActionController::Base.logger. Установка nil отключит регистрацию событий.resource_action_separatorопределяет символ который используется как разделитель между ресурсами и действиями при генерации и распозновании RESTfull URL. По-умолчанию это “/”.resource_path_namesопределяет хэш с именами RESTfull действий.request_forgery_protection_tokensets the token parameter name forRequestForgery. Callingprotect_from_forgerysets it to:authenticity_tokenby default.optimise_named_routesвключает некоторую оптимизацию при генерации таблицы маршрутов. Оптимизация включена по-умолчанию.use_accept_headersets the rules for determining the response format. If this is set totrue(the default) then respond_to andRequest#formatwill take the Accept header into account. If it is set tofalsethen the request format will be determined solely by examiningparams[:format]. If there is no format parameter, then the response format will be either HTML or Javascript depending on whether the request is an AJAX request.allow_forgery_protectionвключает защиту от CSRF. По-умолчанию защита выключена в тестовом режиме и включена во всех остальных.relative_url_rootиспользуется чтобы сообщить Rails, что он установлен в поддиректорию. По-умолчанию имеет значение переменной окруженияENV['RAILS_RELATIVE_URL_ROOT'].
Настройки кэширования имеют дополнительные опции:
ActionController::Caching::Pages.page_cache_directoryопределяет директорию где Rails будет создавать кэшированные страницы Вашего сайта. По-умолчанию этоRails.public_path( то есть обычно RAILS_ROOT + “/public”).ActionController::Caching::Pages.page_cache_extensionопределяет расширение для файлов генерируемых при кэшировании (эта опция игнорируется если входящий запрос уже имеет расширение). По-умолчанию это .html.
Диспетчер имеет такие опции:
ActionController::Dispatcher.error_file_pathзадает путь к папке где Rails ищет файлы ошибок, такие как 404.html. По-умолчанию этоRails.public_path.
Хранение сессий в Active Record тоже может быть настроено:
CGI::Session::ActiveRecordStore::Session.data_column_nameопределяет имя колонки в которой хранятся данные сессии. По-умолчанию “data”
3.3 Настройка Action View
ActionView::Base имеет следующие опции:
debug_rjsвключает для RJS ответов обертку из try/catch блока в котором alert()ится сообщение об ошибке (and then re-raises it). По-умолчанию выключено.warn_cache_missesсообщает Rails о том, что нужно показывать сообщения, если кэш для данного действия отсутствует. По умолчанию выключено.field_error_procprovides an HTML generator for displaying errors that come from Active Record. The default is Proc.new{ |html_tag, instance| “”fieldWithErrors\“>#{html_tag}
” }
default_form_builderсообщает Rails какой генератор веб-форм использовать по-умолчанию. По-умолчанию этоActionView::Helpers::FormBuilder.
The ERB шаблонизатор определяет дополнительные опции:
ActionView::TemplateHandlers::ERB.erb_trim_modeопределяет режим ERB, обрезающий переносы строк. По-умолчанию это ‘-’. Смотри ERB документацию для детальной информации.
3.4 Настройка Action Mailer
ActionMailer::Base имеет следующие опции:
template_rootзадает конревую папку для шаблонов используемых Action Mailer.loggerпринимает регистрирующий объект, с интерфейсомLog4rили стандартный для Ruby 1.8.x класс Logger, используемый для протоколирования вAction Mailer. Вы можете получить к нему доступ используя методActionMailer::Base.logger. Установка nil отключит регистрацию событий.smtp_settingsпозволяет детально настроить:smtpметод отправки писем. Содержит хэш из следующих значений::address– Адрес удаленного почтового сервера. По-умолчанию “localhost”.:port– Если Ваш SMTP сервер работает не на 25 порту, то укажите порт тут.:domain– Если требуется указать HELO домен.:user_name– Если SMTP сервер требует авторизацию, то укажите тут имя пользователя.:password– Если SMTP сервер требует авторизацию, то укажите тут пароль.:authentication– Если SMTP сервер требует авторизацию, то укажите тут тип авторизации. Один из::plain,:login,:cram_md5.
sendmail_settingsпозволяет детально настроить:sendmailметод отправки писем. Содержит хэш из следующих значений::location– Путь до sendmail. По-умолчанию: /usr/sbin/sendmail.:arguments– параметры коммандной строки, с которыми вызовется sendmail. По-умолчанию: -i -t.
raise_delivery_errorsвключает выброс исключения если доставка письма небыла завершена. По-умолчанию: true.delivery_methodопределяет метод отправки писем. Один из::smtp(default),:sendmail, and:test.perform_deliveriesопределяет будет ли фактически отправленно письмо. По-умолчаниюtrue; Для тестов удобно отключать отправку, устанавливая опцию вfalse.default_charsetсообщает Action Mailer в какой кодировке передать письмо. По-умолчанию: utf-8.default_content_typeопределяет content type используемый для основной части письма. По-умолчанию “text/plain”default_mime_versionВерсия MIME. По-умолчанию: 1.0.default_implicit_parts_order– Если письмо состоит из разных частей (html, plaintext…) имеющих свой content type, то эта опция определяет порядок в котором они будут следовать в письме. По-умолчанию:["text/html", "text/enriched", "text/plain"].
3.5 Настройка Active Resource
ActiveResource::Base имеет следующие опции:
loggerпринимает регистрирующий объект, с интерфейсомLog4rили стандартный для Ruby 1.8.x классLogger, используемый для протоколирования вActive Resource. Вы можете получить к нему доступ используя методActiveResource::Base.logger. Установка nil отключит регистрацию событий.
3.6 Настройка Active Support
ActiveSupport::Base имеет следующие опции:
ActiveSupport::BufferedLogger.silenceris set to false to disable the ability to silence logging in a block. The default is true.ActiveSupport::Cache::Store.loggerопределяет регистрирующий объект, с интерфейсомLog4rили стандартный для Ruby 1.8.x классLogger, используемый для протоколирования операций связанных с кэшированием.ActiveSupport::Logger.silenceris set to false to disable the ability to silence logging in a block. The default is true.
3.7 Настройка Active Model
Active Model на сегодняшний момент имеет только одну опцию:
ActiveModel::Errors.default_error_messages– это массив содержащий сообщения об ошибках, возникающих при проверке данных моделей.
4 Использование инициализаторов
После того, как загружается фреймворк и все гемы и плагины Вашего приложения, Rails обращается к инициализаторам. Инициализатор – это любой ruby файл, сохраненный в директории /config/initializers Вашего приложения. Вы можете использовать инициализаторы, чтобы выполнить любой код после загрузки фреймворка, гемов и плагинов.
Для организации Ваших инициализаторов Вы можете использовать подпапки, Rails загрузит файлы из всех вложенных директорий, начиная с /config/initializers.
Если Вам нужно загружать файлы в определенном порядке, то называйте файлы соответственно, потому что Rails загружает их отсортировав по названию. Например, 01_critical.rb будет загружен раньше, чем 02_normal.rb.
5 Использование пост-инициализаторов
Пост-инициализаторы выполняются после того, как любые инициализаторы загружены. Вы можете вставить блок after_initialize (или массив таких блоков), в любом файле конфигурации Rails:
SomeClass.init
end
Некоторые части приложения, особенно наблюдатели или маршрутизация, еще не определены в месте вызова after_initialize.
6 Параметры настройки среды Rails
Некоторые части Rails могут также быть настроены используя переменные среды. Вот список переменных среды, которые распознанаются различными частями Rails:
ENV['RAILS_ENV']определяет режим работы Rails (production, development, test, или другие) в котором он будет запущен.ENV['RAILS_RELATIVE_URL_ROOT']используется маршрутизацией, чтобы распознать URL, когда Ваше приложение запускается в поддиректории.ENV["RAILS_ASSET_ID"]отменяет, создаваемую по-умолчанию, временную метку передываемую как параметр для файлов css и javascript, чтобы исключить кэширование.ENV["RAILS_CACHE_ID"]иENV["RAILS_APP_VERSION"]используется для генерации расширенных ключей для кеширования в Rails. Позволяет создавать несколько отдельных кешей для одного и того же приложения.ENV['RAILS_GEM_VERSION']определяет версию гема Rails, если константаRAILS_GEM_VERSIONне определена вenvironment.rb.
7 Изменения
- 13 Октября 2009: Перевод сделан Лепешкиным Андреем
- 3 Января, 2009: Первая черновая редакция сделана Mike Gunderloy
- 5 Ноября, 2008: Набросок сделан Mike Gunderloy
