Tag: 架构

在rails中手动编辑schema.rb是否安全?

我遇到了一个问题,我在rails项目的两个分支上工作,每个项目都有一个迁移来添加一个列。 当时, rake db:migrate:reset导致出现问题,我完全依赖schema.rb来正确表示我的数据库状态。 有一次,我遇到了一个问题,即分支A添加的列进入了分支B的模式。由于migrate:reset不是一个选项,我使用手动编辑模式文件。 我提交了这个更改,它基本上删除了分支A中我不需要在分支B的schema.rb中的列。 在将分支A合并到主服务器之后出现了问题。 当我尝试将分支B重新命名为master时,我仍然在B中进行了提交,以删除模式文件中的列(现在已经变得相关,因为它在master中)。 Git没有看到这方面的冲突并自动合并它。 在我的rebase结束时,我发现我的模式与master中的模式不一致。 我的修复是再次编辑模式文件并手动将以前删除的列添加回模式文件。 我的问题是:这被认为是非传统的吗? 危险吗? 哈克? 现在它涉及一列但如果这涉及多列删除/添加(危险?)解决方案可能导致更多问题和db / schema.rb不一致。

Ruby on Rails中的多租户架构

请让我知道在Ruby on Rails中实现多租户架构的最佳书籍。 有没有可用的gem或框架?

什么是DCI以及它如何适应Rails?

最近与同事讨论了在Rails应用程序中设计和编码模型的不同方法,这使我在Rails环境中跨越了DCI 。 但是,即使在查看这个示例应用程序之后,我似乎无法绕过整个概念。 目前,在编写Rails应用程序时,我倾向于或多或少地“ 按书 ”。 所以我想问一些事情 – 什么是DCI,与MVC一起实现的普通旧MVC(以及Rails中的vanilla ActiveRecord)有什么优势? 如何在Rails中实现(或者换句话说, 在所有模块中实现什么 )? 编辑 我想在RoR的上下文中进一步扩展我的问题 – Rails建议的模型和控制器之间的另一个抽象层次是什么? 它在不同规模的应用中有多广泛?

应该由不同的控制器处理前端和后端吗?

在我之前的学习项目中,我总是使用单个控制器,但现在我想知道这是好的做法还是总是可行的。 在所有RESTful Rails教程中,控制器都有一个show ,一个edit和一个index视图。 如果授权用户已登录,则edit视图变为可用, index视图将显示其他数据操作控件,如删除按钮或edit视图的链接。 现在我有一个Rails应用程序完全属于这种模式,但index视图不可重用: 普通用户看到一个华丽的索引页面,包含大量图片,复杂的布局,没有Javascript要求,…… Admin用户索引具有完全不同的简约设计,jQuery表和许多其他数据,… 现在我不知道如何处理这个案子。 我能想到以下几点: 单个控制器,单个视图:使用if语句将视图拆分为两个大块/部分。 单控制器,两个视图: index和index_admin 。 两个不同的控制器: BookController和BookAdminController 这些解决方案似乎都不是完美的,但是现在我倾向于使用第三种选择。 这样做的首选方法是什么?

存储应用程序参数的最佳位置在哪里:数据库,文件,代码……?

我正在开发一个Ruby on Rails网站,我有一个“架构”问题:我的应用程序需要一些参数,我想知道在哪里存储它们。 具体而言,我的应用程序会收到一些评估然后发送的请求。 因此,请求模型必须具有与这些处理相关的属性: validation状态和发送状态 。 例如, validation状态可以是“ 接受 ”,“ 拒绝 ”或“ 等待 ”。 发送状态可以是“ 发送 ”,“ 等待 ”,“ 发送期间出错 ”或类似的东西。 我必须在某处存储这些状态代码参数,但我不知道什么是最佳解决方案。 我可以为每个模型创建一个模型并将它们存储在数据库中(例如,有一个活动的记录模型ValidationStatus)但是:创建一个数据库/模型来存储这样的数据不是很难吗? 我也可以在代码中使用它们而不“存储”它们,我可以将它们存储在YAML文件中…… 那么,一个更简单的问题是:如何处理RoR中的应用程序参数?

如何使用Ruby on Rails中的映射表跟踪模型历史记录?

梦想 我想记录用户何时更改其地址。 这样,当下订单时,它将始终能够引用订单放置时使用的用户地址。 可能的架构 users ( id username email … ) user_addresses ( id label line_1 line_2 city state zip … ) user_addresses_map ( user_id user_address_id start_time end_time ) orders ( id user_id user_address_id order_status_id … created_at updated_at ) 在sql中,这可能类似于:[sql] select ua.* from orders o join users u on u.id = o.user_id join user_addressses_map uam […]

RESTful Web服务与数据密集型应用程序的套接字编程

我正在使用Ruby on Rails构建一个Web应用程序,它需要具有高度可伸缩性。 在此应用程序中,数据由移动客户端(大约20个字节)每秒产生。 所有这些数据必须在某个时刻传输到服务器,最好是尽快。 要完成此任务,我希望服务器充当RESTful服务。 客户端可以缓冲位置(例如每5到30秒),然后将其作为HTTP put请求进行拍摄,然后服务器可以存储它们。 我相信这个模型更容易实现,并且更好地处理大量流量,因为客户端可以保持缓冲数据,直到他们听到服务器的响应。 另一方面,我的老板想要使用套接字编程来实现服务器。 他认为套接字编程将导致更少的数据传输,这将提高系统的总效率。 我不能不同意这一点,但我认为考虑到现代带宽,HTTP的额外开销是值得的。 另外,我认为尝试维护数千(或数百万)的用户同时连接会导致自身问题,并大大增加服务器的复杂性。 老实说,我不知道解决这个问题的正确方法,所以我想我会把它发布在这里并得到比我更聪明的人的意见。 如果有任何答案包括所提出的解决方案的优缺点,我将不胜感激。 谢谢。 更新 我们现在已经刷新了一些额外的要求。 首先,移动客户端每月无法上传超过5 GB的数据。 在这种情况下,我们每个月每天八小时通话一条消息。 其次,我们希望尽可能少地组合消息。 这是为了确保移动客户端发生某些事情(比如车祸),我们会尽可能少地丢失数据。

即使在设置schema_format =:sql之后,schema.sql也无法创建

我想创建schema.sql而不是schema.rb。 谷歌搜索后我发现可以通过在application.rb设置sql架构格式来完成。 所以我在application.rb中设置了以下内容 config.active_record.schema_format = :sql 但是如果我将schema_format设置为:sql,则根本不会创建schema.rb / schema.sql。 如果我在上面注释它创建schema.rb,但我需要schema.sql。 我假设它将在其中转储数据库结构,我知道可以使用转储数据库结构 rake db:structure:dump 但是我希望在迁移数据库时自动完成它。 我有什么遗漏或假设错了吗?

编程语言独立模型validation

假设您在基础架构中使用多种不同的编程语言和框架来处理大量流量等。 示例堆栈: 事件驱动的API服务器(使用Scala,node.js,Ruby EM) 标准的完整堆栈webapp(例如Rails) (也许更多的技术) 当使用不同的语言和框架时,我通常最终会复制大多数模型validation,因为每个“客户入口点”都需要validation其输入。 保持同步当然是一种痛苦。 没有像CORBA这样的东西你会如何处理?

从现有表生成activerecord模式

有谁知道这样做的方法? 我有一个用sql创建的现有表,我想从中创建一个可以重现表的模式(减去数据)