gpt4 book ai didi

ruby-on-rails - rails 3.1 引擎和数据库

转载 作者:行者123 更新时间:2023-12-05 00:37:46 24 4
gpt4 key购买 nike

rails 3.1引擎是否可以拥有自己的数据库,同时也可以访问主应用程序的数据库,例如用于用户身份验证
如果可能,我该如何配置?

谢谢

最佳答案

是的他们可以。我已经构建了使用单独的 sqlite3 数据库的引擎。这样,所有引擎的功能和数据都是隔离的。去掉引擎,去掉数据库,一切就烟消云散了。

首先,您最好生成一个 mountable engine .这将创建一个命名空间并将引擎与您的主应用程序隔离。这不是要求,而是最佳实践。我假设您已经完成了以下示例。

在某一时刻,您将在引擎内生成一个模型。在引擎根路径中,键入如下内容:

$ rails generate resource Post

这将生成 Post Controller 、模型和路由。除了数据库迁移,一切都很完美。你要删除这个。如果您想将数据分开,这种迁移是无用的。引擎内部迁移的唯一目标是将它们复制到主应用程序的数据库中。所以继续并摆脱它:
$ rm -r db

现在像往常一样连接你的根路由和 Controller 。

模型内部还需要进行一项更改,以使其连接到单独的数据库。
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);

快!现在只需将引擎安装到您的应用程序中,启动它,它就应该准备好运行了。显然现在你的引擎有一个单独的数据库,使用迁移是没有用的。您必须手动更新架构。

关于ruby-on-rails - rails 3.1 引擎和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com