17

我想为 Rails 应用程序设置一个登台服务器。我使用 git & github、Cap,并且有一个带有 Apache/Passenger 的 VPS。我很好奇登台设置的最佳实践,包括登台服务器的配置以及与之交互的流程。我确实知道它应该尽可能与生产服务器相同,但限制对其的公共访问会限制它,因此仅为我使用保护它的提示也很棒。

另一个具体问题是我是否可以在 VPS 上创建一个虚拟主机,以便临时服务器可以与生产服务器一起驻留。不过,我觉得可能有理由避免这种情况。

4

5 回答 5

15

便宜又简单的答案:

1) 在您的 VPS 上指向 staging.domainname.com。

2)添加一个虚拟主机用于暂存,指向应用程序的暂存副本。

3)添加临时环境设置。(你知道你可以在 Rails 中定义新环境吗?有趣的东西!)我认为这就像将 production.rb 复制到 staging.rb 并根据需要进行调整,再加上更新 database.yml 一样简单。

4)在ActionController中,添加类似如下的代码

   if (ENV["RAILS_ENV"] == "staging")
     before_filter :verifies_admin
   end

哪里verifies_admin可以是你想要的任何东西。我建议使用 HTTP 基本身份验证——既便宜又容易。

def verifies_admin
  authenticate_or_request_with_http_basic do |username, password|
    username == "foo" && password == "bar"
  end
end

请注意,如果他们向您发出入站请求,这可能会破坏您与该支付站点的连接,尽管这很容易解决(只需关闭 before_filter 以获取适当的控制器和/或操作。)

更好的答案:

1) 购买第二个 VPS,该 VPS 使用与常规 VPS 相同的映像配置,和/或使用相同的 install-from-the-bare-metal 脚本进行配置(我喜欢 Capistrano 和 Deprec)。

2) 将 staging.domainname.com 指向它。

3)否则它与其他选项相同。

需要考虑的事情:

1)我也应该有一个暂存数据库吗?可能,特别是如果您要测试架构更改。

2) 我应该有一些设施来在暂存系统和生产系统之间移动数据吗?

3) 我的暂存应用程序发生灾难性故障会导致主应用程序瘫痪吗?最好的答案是否定的。

于 2009-02-20T04:04:44.803 回答
4

我要补充一点,创建 Capistrano 的 Jamis Buck 还创建了一个 gem,专门用于使用 Capistrano 设置多阶段环境。您可以在没有 gem 的情况下做到这一点,但是 gem 使它更容易。你可以在这里找到他的帖子和说明:http ://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

Pragmatic Programmer 一书“Advanced Rails Recipes”中还有一篇非常有用的文章,它会指导您准确地进行设置。我发现这篇文章的答案与 Rails 食谱书相结合使设置起来非常容易。

StackOverflow 不会让我添加另一个链接,但如果你用谷歌搜索 Advanced Rails Recipes,这本书就是第一个结果。

于 2010-06-14T02:36:00.467 回答
3

我想这取决于除您之外的任何人是否需要访问登台服务器。如果其他人需要能够访问它,那么您将需要另一个小片,然后您可以使用 htaccess 或防火墙规则来限制谁可以访问它。如果没有其他人需要访问它,我建议使用 VMWare。你可以在你自己的机器上运行它,或者你身边的一个备用盒子,或者一台非常便宜的 PC。我们将免费的 VMWare Server 2 用于我们的暂存和部署测试服务器,它运行良好。只需复制您的基本 VM 设置,就可以非常轻松地创建新的测试服务器。如果您使用的是 Mac,您可以使用 VMWare Fusion,但要花钱,但我必须已经使用它来测试 IE。

于 2009-02-19T15:00:19.820 回答
3

我可能会因为这样说而受到打击,但是对于预算紧张的小型网站,我认为在生产网站旁边运行临时网站没有任何问题。

您正在使用 Rails、Apache 和Passenger。设置不同的 Rails 配置(和数据库),并将每一个设置为一个命名的 VirtualHost。用 htaccess 保护一个。从您的域创建一条 A 记录(暂存。*)并将其指向那里。

当然,它们之间并不是完全绝缘的。你可能会崩溃一切。哎呀!应该没关系吧 :)

于 2009-02-20T00:40:01.347 回答
1

使用两个独立的服务器(VPS 或其他),尽可能在基础映像中制作它们(硬件和软件)。自动化您的生产环境的所有配置,因此无需手动完成任何操作。使用该自动化来生成与您的生产环境相同的登台服务器。保持自动化以确保两个环境保持同步并且可以按需复制。

解决您的暂存不同步问题和一阶扩展问题。

就成本而言,VPS 与芯片一样便宜。通过拥有一个登台服务器,您将避免的生产停机引发故障的数量将立即为您的登台环境支付费用(除非您实际上根本没有赚钱,在这种情况下,停机时间不是那么大问题,你可能会因为破损而发疯)。

于 2009-02-19T21:15:52.750 回答