加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:00:48 所属栏目:百科 来源:网络整理
导读:rails 3.1引擎可以拥有自己的数据库,同时还可以访问主应用程序的数据库,例如用于用户身份验证 如果可能,我该如何配置? 谢谢 解决方法 是的他们可以.我已经构建了使用单独的sqlite3数据库的引擎.这样,所有引擎的功能和数据都是隔离的.删除引擎,删除数据库,一
rails 3.1引擎可以拥有自己的数据库,同时还可以访问主应用程序的数据库,例如用于用户身份验证
如果可能,我该如何配置?

谢谢

解决方法

是的他们可以.我已经构建了使用单独的sqlite3数据库的引擎.这样,所有引擎的功能和数据都是隔离的.删除引擎,删除数据库,一切都没有留下痕迹.

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

有一次,您将在引擎内生成模型.在引擎根路径中,键入以下内容:

$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);

普雷斯托!现在只需将引擎安装在您的应用程序中,启动它就应该准备就绪了.显然现在您的引擎有一个单独的数据库,它与迁移一起使用是没有用的.您必须手动更新架构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读