Capistrano,Rails 3.2,标准食谱?

我一直在开发Rails,但不知何故,直到现在才避免使用Capistrano。

为了弄清楚如何开始,我对使用资产管道部署的相当“标准”rails 3.x的最佳capistrano配方感到困惑。 也许是因为环顾谷歌,人们会从不同的历史时期发现“答案”,并在不同的历史时期将不同的东西构建成上限。

我有一个应用程序,我保留在git中,rails 3.2和资产管道一起部署到只有一个带有乘客的主机上。

考虑它,我基本上需要上限:

  • 从git部署?
  • 在git中为这个部署添加一个标签(和/或使用一个部署分支?如果存在这样的事情,那么最上面的标准是什么)
  • 捆绑安装 - 部署
  • rake db:migrate
  • 耙资产:预编译
  • 触摸tmp / restart.txt
  • 哦,废话,更可能是奇怪的事情:

  • 我想我将在部署服务器上使用系统范围的rbenv安装。 不知道这是什么。
  • 做上述所有事情最简单,最简单,最可持续的方法是什么? 有什么我失踪? 如果我指定的某些标准不是标准的,我很乐意使用标准的最佳实践(可能有一两个例外,我确实希望每个部署都有一个git标记,即使这不是标准的最佳实践,尽管我认为它会是,但看着文档它是如何工作的)

    这里有一个简单的答案吗?

    编辑 :是的,我看了盖维基。 这可能是因为我很慢,但我找到了答案,没有我的问题。 甚至没有“入门”文件。 没有关于默认开箱即用的配方实际上的文档。 等等

    更新 :我写了自己的指南后,找出它。 https://gist.github.com/2161449


    那么,不必使用capistrano是一件幸事:-)。 我越来越不喜欢它,但公平地说,它已经变得更好了,这里的文档https://github.com/capistrano/capistrano/wiki/解决了大部分问题 - 关于RVM的部分可能就足够了替代rbenv。 您的配置应该与一个开箱即用的capfile相当。

    编辑:是的,你需要自己做标记,但关键是想像你在capfile中写的方法只是系统命令(记住你可能没有你的普通shell路径和其他环境)。 按照其他git命令的例子,你会没事的。

    编辑:更好的回答(也许:-)

  • 去这里:https://github.com/capistrano/capistrano/wiki/2.x-From-The-Beginning
  • gem install capistrano (注意,通常这不属于你的Gemfile)
  • 光盘
  • capify . 创建app/Capfileapp/config/deploy.rb
  • 您正在使用资产管道,因此在Capfile中取消注释load 'deploy/assets'
  • 现在,查看deploy.rb
  • 应用程序名称是一个名称,如“my_application”
  • 存储库是您的源代码管理仓库的URL,例如myusername@github.com:yourrepo/yourproj.git
  • scm: git (对吗?如果不是,同样的想法:上面的URL和SVN的这个或者其他)
  • role :web "www.example.com" ,因为你的:db和:app都在一个盒子里,所以这些都是一样的
  • 您正在使用Passenger,因此请按照指示取消注释。
  • 不知道,但你可能不得不require "bundler/capistrano"顶部的require "bundler/capistrano"
  • 你需要一个set :deploy_to, <remote installation path>也许"/var/www"
  • 请遵循指南中的其他步骤
  • 假设在这些以及我错过的步骤之后,检查所有这些,并确保您的应用程序已签入(并在git时推送),并执行cap deploy:setup
  • 假设,安装程序会相应地配置您的服务器。 这里最可能的错误是您的当前机器需要ssh到远程机器的权限,并且远程机器需要访问源代码管理存储库。 公钥是你的朋友。

    在此之后,工作流程是:

  • 做出改变
  • 在本地测试
  • 承诺,并推动混帐
  • cap deploy migrations (迁移部分只在必要时才需要)
  • 大多数组织都有某种分段或测试服务器。 寻找“多阶段”来获得它,以便您可以进行cap test deploycap staging deploy等。

    要在git上部署一个分支(我认为是一个标签),它的cap -S <branch/tagname> deploy (确保它是大写字母S,可能是小写字母)。

    一旦你完成了这个任务,在部署之前或之后你可能会想做一些事情 - 例如发送电子邮件,重新生成站点地图,备份数据库等等。 使用挂钩之前或之后编写自己的任务。

    所以capistrano最糟糕的部分是,所有的文件假定你知道它到底做了什么。 简而言之,它使用ssh(ruby的net-ssh)从您部署的任何本地工作站执行远程服务器上的命令。 它会查看源代码树的头部(如果指定了标签或分支),将其拉到服务器上的新位置,执行其他任何操作(迁移,资产预编译)并准备好应用程序; 一旦它看起来不错,它会改变一个符号链接(例如/var/www/current指向新的位置,然后(在Passenger的情况下)调用touch app/tmp/restart.txt来重启服务器。

    更好?


    这是我用于大部分项目的帽子配方...

    https://gist.github.com/2118882

    它不会做标记,但它可以在自定义任务中完成,它们被编写为rake任务。 默认情况下,它将执行预编译和捆绑安装。 底部是通过触摸tmp / restart.txt而不是重新启动来重新加载的任务。 它也会清理你的发布版本,所以你只有最新的3个服务器(而不是默认保存)。

    我在任何环境中都没有RBEnv的知识,我使用RVM进行开发,并且曾经在生产环境中使用过RVM,但是在生产环境中管理多个红宝石(以及非常糟糕的做法)让我不会再这样做。 它为服务器端软件包的升级过程增加了很多复杂性。


    你见过Railscast:部署到VPS虽然它基于nginx和独角兽,但还有一种替代的乘客配方。

    链接地址: http://www.djcxy.com/p/81099.html

    上一篇: Capistrano, Rails 3.2, standard recipes?

    下一篇: Managing security for an open source rails 3 application stored at github