Вопрос дизайна для проекта Ruby on Rails - PullRequest
2 голосов
/ 05 июня 2011

Я начинаю работать над новым приложением Ruby on Rails, которое представляет собой интерфейс CRUD для определенных атрибутов, содержащихся в файле конфигурации.Процесс будет выглядеть примерно так: CRUD RoR App> База данных> Экспорт в файл конфигурации.

Мой вопрос заключается в том, каков оптимальный способ его создания (внутренняя часть, которая экспортируется из БД в файл конфигурации).Предполагая, что файл конфигурации находится на том же сервере, что и приложение RoR, я бы просто написал отдельные классы (в / lib), которые имеют методы для чтения / записи в файл конфигурации и включили / вызвали их в фильтре before_create в моих моделях?

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Это действительно плохая идея - создавать приложение, которое изменяет себя при запросе через пользовательский ввод.Это побеждает преимущества контроля версий, и это делает для многих запутанных ошибок.

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

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

class Foo
  if RUBY_VERSION == '1.9.2'
    def self.bar
      # do something 1.9.2 style
    end
  else
    def self.bar
      # do something 1.8.7 style
  end
end

В этом примере показано более распространенное переключение Ruby-версии, но вы можете сделать то же самое, основываясь на значениях конфигурации , если они доступны для приложения.когда определение класса выполняется .Если вы load класс, в котором вы делаете это, вы всегда можете load повторить это, если / когда значения конфигурации изменятся, чтобы получить это преимущество.

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

Имеет смысл?

1 голос
/ 05 июня 2011

Да, вы можете просто рассматривать ConfigFile как класс модели, который не использует ActiveRecord.Он может работать с другими вашими моделями (не обязательно указывать в /lib).

class ConfigFile #note no inheriting from AR::Base

  def import
    ...
  end

  def export
    ...
  end
end

Этот класс может быть интерфейсом для файла, используемого вашим приложением Rails.Я не уверен насчет вызова из before_create, хотя.Если вы планируете восстанавливать весь файл каждый раз, вы не захотите делать это, когда обновляется только одна его часть, если только он не очень маленький.

У вас есть возможность определить форматиз конфигурационного файла?Просто выведите model.to_yaml и все готово!

...