Подтвердить что ты не робот

Объясните мне, как config работает в Rails

У меня есть приложение Rails 3, назовите его "MyApp". В моем файле config\environment\production.rb я вижу такие вещи, как

MyApp::Application.configure do
  config.log_level = :info
  config.logger = Logger.new(config.paths.log.first, 'daily')
   ...or...
  config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"),3,20*1024*1024)

Итак, вопросы сосредоточены на терминологии, и они означают... (или указать мне на какой-то сайт, я посмотрел, но не нашел, чтобы объяснить, как это работает.)

  • MyApp - это модуль?
  • MyApp:: Приложение - это...? Что, модуль тоже?
  • MyApp:: Application.configure - это метод?
  • config - переменная? Как это увидеть на консоли?
  • config.logger - это
  • config.paths.log.first - это...?? - В консоли я вижу "MyApp:: Application.configure.config.paths.log.first", но не знаю, что это значит или как извлечь информацию из этого!?!

Это слишком много для одного вопроса?:)

Я просмотрел учебник http://guides.rubyonrails.org/configuring.html, но он сразу же перескакивает на что-то.

4b9b3361

Ответ 1

Шестисторонний вопрос! О, мой. Пусть г-н рулон. 1 В этом случае я надеюсь, что я получу в 6 раз больше очков для него?:)

1. MyApp - это модуль?

Да, это модуль. Он действует как "контейнер" для всех вещей, относящихся к вашему приложению. Например, вы можете определить класс следующим образом:

module MyApp
  class MyFunClass
    def my_fun_method
    end
  end
end

Тогда, если у кого-то есть MyFunClass, он не будет мешать вашему MyFunClass. Это просто отличный способ отделить код.

2. MyApp:: Приложение - это...? Что, модуль тоже?

MyApp::Application - фактически класс, наследующий от Rails::Application. Это довольно много, включая настройку объекта Rails.application, который на самом деле является экземпляром MyApp::Application, что вы можете делать всевозможные забавные вещи, например, делать запросы к вашему приложению (в rails console или rails c сеанс). Этот код, например, сделал бы фиктивный запрос к корневому пути вашего приложения, возвращая 3-мерный массив, который является просто обычным ответом Rack:

 Rails.application.call(Rack::MockRequest.env_for("/"))

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

 Rails.application.routes

Основная цель определения MyApp::Application - это не такие забавные вещи, которые вы, вероятно, никогда не используете, а скорее можете определить конфигурацию, специфичную для приложения, внутри config/application.rb. Такие вещи, как параметры фильтрации, часовой пояс приложения или какие каталоги должны быть загружены автоматически. Все они описаны в Руководство по конфигурации для Rails.

3. MyApp:: Application.configure - это метод?

Действительно, это метод, и он позволяет добавлять дополнительные параметры конфигурации в конфигурацию вашего приложения после загрузки config/application.rb. Вероятно, вы видели это в config/environments/development.rb или одном из двух других файлов в этом каталоге, но в основном все они используют те же параметры, что и в Configuration Руководство, связанное с ранее.

4. config - переменная? Как это увидеть на консоли?

config "переменная" на самом деле является методом, определенным в коде, используемом для Rails::Application, и возвращает довольно простой объект конфигурации, который сохраняет конфигурацию для приложения.

Чтобы получить доступ к нему в консоли, просто используйте Rails.application.config. Это вернет довольно большой объект Rails::Application::Configuration для вашего удовольствия.

5. config.logger является <

Метод, на который вы ссылаетесь, я полагаю, исходит из этой строки в config/environments/production.rb:

# Use a different logger for distributed setups
# config.logger = SyslogLogger.new

Метод в этом примере не config.logger, а скорее config.logger=, который упоминается как метод "сеттера" в Ruby-land. Единица без знака равенства называется "геттером". Этот метод устанавливает альтернативный журнал для рабочей среды в Rails, к которому затем можно получить доступ, используя Rails.logger внутри консоли или самого приложения.

Это полезно, если вы хотите вывести что-то в журналы, так как вы можете просто вызвать этот код:

Rails.logger.info("DEBUG INFO GOES HERE")

6. config.paths.log.first - это...?? В консоли я вижу "MyApp:: Application.configure.config.paths.log.first", но не знаю, что это значит или как извлечь информацию из этого!?!

В приложении Rails вы можете изменить расположение определенных каталогов. Таким образом, этот метод config.paths - это способ отслеживания того, к чему относятся эти каталоги. Во всей моей жизни Rails мне никогда не приходилось использовать или изменять эту переменную, и это может означать либо одну из двух вещей:

  • Он часто не используется программистами Rails или;
  • Я не живу очень разнообразной жизнью.

Интерпретировать его так, как вы. Главное, что вы, вероятно, никогда не будете использовать его.


Надеюсь, они помогут вам понять Rails немного больше!

1 Ужасная шутка.

Ответ 2

  • MyApp - это модуль, это пространство имен, включающее приложение, которое вы запустите, см. в следующей строке

  • MyApp::Application - это класс, и вы запускаете его экземпляры при запуске приложения Rails

  • MyApp::Application.configure - метод. Он передает все инструкции классу. См. ссылку

  • config - это метод или переменная экземпляра (когда установлена), которая принадлежит наследованию к Rails::Application::Configuration. См. ссылку

Вы можете видеть это в консоли: MyApp::Application.config

  • config.logger не существует, пока вы его не определите, так что это экземпляр Logger. См. ссылку

  • config.paths.log является Rails::Paths::Path

вы можете получить доступ к нему в консоли, используя: MyApp::Application.config.paths.log