我正在编写一个 Rails 应用程序,可以“抓取/导航”一些其他网站和网络服务的内容。我正在使用 Mechanize和 Savon做繁重的工作。
但考虑到网络的动态特性,我希望网站的管理员用户可以编辑我对这些的调用 - 而不是要求我发布网站的新版本。
实际的抓取线程与网站异步发生,使用 daemons gem 。
我的要求是:
- 认为抓取/网络服务调用代码非常简单,最简单的方法是让管理员可以编辑整个类。
- 保留抓取代码的历史记录 - 以便我们在遇到问题时可以很容易地恢复。
- 最初使用文件系统中的代码,但一旦对其进行编辑并存储在某处,就改用该代码。
我认为我的选择是:
- 将代码存储在数据库中(带有旧版本的历史表)
- 将代码存储在某个地方的私有(private) git 存储库中并 access that历史/最新版本。
我认为 git 路由可能是最简单的,因为它存在的理由是跟踪文件历史... 但也许有一个 gem/插件可以为我完成所有这些,开箱即用?
提前感谢您提供任何提示/建议。 ~克里斯
最佳答案
我真的希望你不会做类似 what's talked about here 的事情...
假设您正在做一个适当的混合,曾经有一个名为“acts_as_versioned”的 gem 可以做您想要的事情。好久没用了,不知道是改成了插件还是废弃了。本质上,它使用的过程是为您的版本化表提供组合键。
您的数据库将具有如下结构:
- 关键列(记录的id)
- 版本列(记录版本的 id)
- 所有记录属性
假设您有一个脚本表,您想要的脚本有三个版本。您的表将包含以下记录:
- 123, 3, '#Be good now'
- 123, 2, '输入“你好”'
- 123, 1, '#Do not be bad'
获取最新版本就像
Scripts.find :first, :conditions=>{:id=>123}, :order=>"version desc"
回滚就像删除最新版本一样简单,或者让另一个表带有指向事件版本的指针。这取决于你。
您是正确的,git
、subversion
、mercurial
和公司在这方面会做得更好。要提供支持,您只需按照以下步骤操作:
- 检查服务器上的脚本(使用标签以便您可以随时管理那里的内容)
- 设置一个 cron 作业以定期检查新脚本(例如每六个小时或任何您觉得合适的时间)
- 用于运行脚本的守护进程应该自动运行新版本。
关于ruby-on-rails - 如何构建可在运行时编辑的 Rails 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625729/