Да, они могут.Я построил движки, которые используют отдельную базу данных sqlite3.Таким образом, все функциональные возможности и данные движка изолированы.Удалите движок, удалите базу данных, и все исчезнет, не оставив следа.
Прежде всего, желательно, чтобы вы создали монтируемый движок .Это создает пространство имен и изолирует движок от вашего основного приложения.Это не требование, а лучшая практика.Я предполагаю, что вы сделали в следующих примерах.
В какой-то момент вы собираетесь создать модель внутри вашего движка.В корневом пути движка введите что-то вроде этого:
$ rails generate resource Post
Это сгенерирует контроллер Post, модель и маршрут.Все идеально, за исключением миграции базы данных.Вы собираетесь удалить это.Эта миграция бесполезна, если вы хотите сохранить свои данные отдельно.Единственная цель миграции внутри движков - скопировать их в базу данных основного приложения.Так что продолжайте и избавьтесь от этого:
$ rm -r db
Теперь подключите ваш корневой маршрут и контроллер, как обычно.
В модели есть еще одно изменение, чтобы подключить егов отдельную базу данных.
module YourEngine
class Post < ActiveRecord::Base
establish_connection :adapter => 'sqlite3', :database => 'db/your_engine.sqlite3'
end
end
Таким образом, модель двигателя будет использовать не основную базу данных, а ту, которую вы определяете.Ключ к пониманию заключается в том, что файл базы данных не живет внутри движка!Этот файл базы данных находится внутри хост-приложения.Поскольку вы храните все отдельно, вы должны создать эту базу данных вручную.Быстрее всего использовать инструмент командной строки sqlite3 и созданный вручную оператор create:
$ cd "the root dir of the host rails app"
$ sqlite3 db/your_engine.sqlite3
из того места, где вы создаете таблицу:
CREATE TABLE your_engine_posts (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(255) NOT NULL DEFAULT '', body text, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL);
Presto!Теперь нужно просто установить движок внутри вашего приложения, загрузить его, и все должно быть готово к работе.Очевидно, теперь, когда у вашего движка есть отдельная база данных, бесполезно работать с миграциями.Вам придется обновить схему вручную.