【问题标题】:Create a "playable demo" version of a Rails site?创建 Rails 站点的“可播放演示”版本?
【发布时间】:2009-09-08 23:00:33
【问题描述】:

这在网站中很常见 - 您有一个“演示”版本,其中包含一个充满数据/帖子/cmets 的访客帐户,您可以使用这些帐户,并且每隔几个小时重置一次所有数据,因此用户不会向演示网站发送垃圾邮件。

我想有另一个 Rails 环境“mysite_demo”并使用 cron 作业调用 rake 每 X 小时重置一次数据库,并填充种子数据。

然后我突然想到,在我的整个应用程序中,我必须检查我是否在“演示模式”下运行: 例如,如果演示站点也有登录/注册页面,用户可能会注册,插入一些数据并想知道为什么他的帐户在再次登录后被删除..所以演示站点根本不应该有注册选项。

所以我想我会做一个代码的“演示”分支.. 有不同之处,只是在我去的时候合并更改......听起来有点矫枉过正。

想法?

【问题讨论】:

    标签: ruby-on-rails web demo


    【解决方案1】:

    在我的应用程序中,我从一个固定的演示用户开始,该用户的帐户每小时重置一次。该模型的某些内容并不完全正确-如果有多个用户同时访问演示,您可能会遇到一些奇怪的并发问题。如果用户正在进行演示并且您重置了演示帐户怎么办?会发生什么?

    我不知道这个模型是否适合你,但我最终创建了一个全新的用户帐户,并在数据库中设置了一个演示标志 - 我还自动登录用户。这样用户就可以玩只要他们喜欢,我就不必担心在用户演示我的应用程序时数据会被删除/更改。我每天晚上运行一个 cron 作业,删除设置了演示标志的用户超过 24 小时。

    【讨论】:

      【解决方案2】:

      如果演示版是从自己的数据库运行的,它与真实的有什么不同?演示站点只是您的产品的一个实例。

      只需清理数据库并根据需要重新部署演示。就是这么简单还是我遗漏了什么?

      【讨论】:

      • 演示站点缺少某些功能,例如注册新用户.. 所以正如我所写,不能按原样部署,需要创建自己的分支或让代码检查它是否正在运行生产或演示。不确定这两个选项是否好,因此问题:)
      【解决方案3】:

      然后我突然想到,在我的整个应用程序中,我必须检查我是否在“演示模式”下运行(例如,您不能在演示中注册新用户)并让网站做出相应的行为。

      如果网站处于演示阶段,为什么用户做什么很重要?他们所做的任何事情都会在几个小时内被清除,因此他们将无法实际使用它。

      听起来您想限制网站,以便他们付费。我不知道您的网站是做什么的,但如果它是基于主机的服务(存储和显示信息的网页),那么有限的数据生命周期应该会阻止擅自占地者。

      如果您的网站做了一些可以在其他地方使用的东西,那么我可以看到它受到限制。一个示例可能是转换媒体格式或编写简历的服务。如果用户可以在 2 小时的窗口内做一些有用的事情并离开它,那么你可能会考虑分支。

      【讨论】:

      • 不,不妨碍-我唯一想到的是进入演示的用户会看到一个“注册”选项,实际上会注册,然后想知道他的所有数据在一个小时..所以我想禁用演示中的注册帐户,只需让他们拥有一个包含所有数据的访客帐户即可使用
      【解决方案4】:

      为什么不让用户创建一个帐户,即使它在一小时内被删除?
      这使他们可以看到脚本的注册过程如何工作至少一个小时,可能会在注册页面上显示该帐户仅在一个小时内有效。

      只是我的想法

      【讨论】:

      • 这是一个选项,但是我必须再次在注册页面中插入更改以显示消息..所以这是同样的问题:)
      【解决方案5】:

      演示版与生产环境有什么不同的功能吗?如果只是让用户注册的问题,您可以在生产中创建一个注册的模拟账户,并为人们提供用户名/密码。虽然这可能不是一个选项,具体取决于其他业务需求。

      【讨论】:

      • 演示应该具有完全相同的功能,只是添加了数据,这样用户就不必创建所有数据来查看网站看起来“完整”的样子。
      • 我认为在生产环境中运行会清除大量数据的任务有点冒险。不同的数据库更安全。此外,更少的数据污染
      【解决方案6】:

      如果您愿意使用 Authlogic,您可以查看 this,然后每隔 X 小时您可以查看数据库中以 anonymous_ 开头的用户并删除与他们关联的记录。

      【讨论】:

      • 正如我对 ryan 的回答,大规模创建/删除这样的数据并不安全,更多的是在合法用户帐户中。我认为这只是在告诉墨菲:“看这里-一个一切都可能出错的地方!” :)
      • 这个方法很多人都用,执行之前肯定是想好了的。
      【解决方案7】:

      只需创建一个与生产站点完全相同的单独演示站点,但数据库会每小时重置一次以清理示例数据。您需要做的唯一更改是每个页面顶部的横幅,上面写着它的演示。有几种方法可以做到这一点(修改您的网站主题,或者可能使用框架),但基本上您应该只需要在一个地方更改代码,而不是整个网站。

      【讨论】:

        【解决方案8】:

        您可以在您的 database.yml 上设置一个新的环境演示,对 User 表具有只读权限,以及一个额外的 demo_database。然后对您的代码进行一些检查,看看您的 RAILS_ENV 是否在 DEMO 上。

        这样,您只需要使用相同的代码库并展示您喜欢的任何内容。

        【讨论】:

          【解决方案9】:

          您可以将其作为具有自己的数据库的单独应用程序部署到单独的域或子域,然后检查域以确定哪些选项应该可用。例如,如果您将其放在 demo.example.com 上,您将使用:

          if request.domain =~ /demo/
          

          如果您使用 Capistrano,您可以将其设置为在部署时更新这两个应用程序,以便它们同步。

          【讨论】:

            猜你喜欢
            • 2019-03-25
            • 2014-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-31
            • 2012-02-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多