Как создать новую базу данных из приложения Rails? - PullRequest
0 голосов
/ 14 октября 2010

Я работаю над приложением Rails, которое имеет одну базу данных на учетную запись. (Я знаю, что это противоречивый подход сам по себе, но я уверен, что в данном случае он правильный).

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

Тогда мой вопрос, как это лучше всего сделать? Я не думаю, что смогу просто запустить миграцию из приложения (или, если смогу, как?), И просто выполнение простых запросов SQL внутри приложения с жестко закодированными операторами CREATE TABLE кажется действительно громоздким способом выполнения действий. Какой подход я должен выбрать, тогда?

Заранее спасибо за помощь!

David

1 Ответ

1 голос
/ 05 января 2012

Это подход, который требует мое приложение.Приложение предоставляет веб-интерфейс на ряд удаленных встроенных устройств, которые в свою очередь контролируют датчики.Каждое встроенное устройство запускает клиентский процесс ruby, который считывает файл конфигурации, чтобы определить его настройку.Необходимо добавить новый тип датчика.

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

Одна из первых проблем заключается в том, что на удаленных встроенных устройствах нет приложения rails - поэтому таблицаплюрализм имен плохой план, так как правила плюрализации недоступны для удаленных устройств.Поэтому я установил

ActiveRecord::Base.pluralize_table_names = false

в config / environment.rb

Данные о каждом типе сенсорного устройства хранятся в модели SensorType, которая имеет два поля - имя сенсора и конфигсодержимое файла.

Внутри класса модели SensorType есть методы для:

  1. Анализ файла конфигурации для извлечения имен и типов полей
  2. Создание миграции для построения новой модели
  3. Изменение определенного поля в БД из общей строки в char (17), так как это MAC-адрес, используемый для индексации
  4. Изменение нового кода модели для добавления соответствующих отношений own_to
  5. Создание частичных шаблонов для вывода данных в таблицу (частичный заголовок и частичный элемент line_item)

Все эти методы связаны друг с другом методом create_sensor_table, который вызывает все вышеперечисленное и выполняетсоответствующие операторы require или load для обеспечения немедленной загрузки новой модели.Это вызывается из метода создания в SensorTypeController следующим образом:

  # POST /device_types
  # POST /device_types.xml
  def create
    @sensor_type = SensorType.new(params[:sensor_type])

    respond_to do |format|
      if @sensor_type.save

        @sensor_type.create_sensor_tables

        flash[:notice] = 'SensorType was successfully created.'
        #etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...