将rails应用程序部署到多个环境

时间:2009-10-12 20:36:04

标签: ruby-on-rails deployment capistrano production-environment

我准备部署到真正的生产环境。当我说真的时,我的意思是我现在的生产环境现在将进行升级,因为服务器上还有其他废话,我正在创建一个新的更大的切片,实际上是我的生产机器。

capistrano-ext gem使部署配方分离变得非常容易。但是,我遇到的一个问题是将我的代码从一个切片转到另一个切片。我在我的分段切片上设置了一个git repo,我将用于制作。流程将是:

在当地发展 在本地测试 从本地推送到舞台 在舞台上测试 从舞台推向生产 ...

因此,我显然需要一种在登台和生产之间建立安全连接的方法。部署到生产时,我得到“权限被拒绝(公钥)”。错误,因为没有设置。我该如何建立这种联系?我是否需要在生产服务器上生成密钥并将公众放在我的登台上?我如何知道我的生产服务器上的哪些用户正在尝试连接到我的登台服务器?

4 个答案:

答案 0 :(得分:2)

分支和capistrano multistage是你的朋友。

要解决生产无法访问git repo问题的问题,请尝试...

set :deploy_via, :copy

......通过在当地结账并按下焦油球进行部署。

答案 1 :(得分:1)

我发现使用Capistrano时,分支或版本标记可以更好地区分分段与生产。

例如,为您的应用程序设置“临时”和“生产”分支,并使用源代码管理工具管理从一个到另一个的迁移。在部署期间,只需像往常一样进行部署,但使用特定分支而不是主分支。

没有必要直接从登台升级到生产,事实上,这可能被认为是一个坏主意,因为任何有权访问登台机器的人都可能有权访问生产服务器。在大多数环境中,临时服务器比生产站点更容易处理,因此安全配置文件通常会有很大不同。

答案 2 :(得分:1)

  

我是否需要在生产服务器上生成密钥并将公众放在我的登台上?

  

我如何知道我的生产服务器上的哪些用户正在尝试连接到我的登台服务器?

productionuser将是您连接的任何用户(请参阅:user)。 staginguser将来自git url(参见:repository)。

使用时

set :deploy_via, :remote_cache

(这是默认设置),实际上发生了两个ssh连接。第一个是从本地机器到生产,它使用配方中配置的“用户”。

set :user, 'www-data'

第二个ssh连接是由该用户在生产时发送到您的git源。因此,如果git origin在暂存时,生产用户正在尝试连接回登台以从git中提取代码。

set :repository, "staginguser@staging.com:project.git"

试试这个:ssh以用户身份进行制作。然后手动运行失败的命令。你会看到“权限被拒绝”,也许是提示输入密码。将登台服务器用户的公钥添加到生产框中,事情应该更好。

答案 3 :(得分:0)

还有:

set :gateway, 'staging server ip'

应该允许您一直穿过防火墙生产箱。但是,如果您要从分段进行部署,则需要在分段框中设置密钥,如果您要通过这种方式进行修改。

另一方面,重要的是能够从您的家庭盒子完成整个过程,分期真的不需要有一个capistrano宝石,希望你可以完成整个过程,而不必实际登录到服务器。这包括登录到您的登台服务器。 :)

如果在两者之间存在数据推送的问题,可以很容易地将其添加到生产配置中,以便它自动从暂存和rsync中获取数据。

相关问题