Capistrano,Rails 3.2,标准食谱?
我一直在开发Rails,但不知何故,直到现在才避免使用Capistrano。
为了弄清楚如何开始,我对使用资产管道部署的相当“标准”rails 3.x的最佳capistrano配方感到困惑。 也许是因为环顾谷歌,人们会从不同的历史时期发现“答案”,并在不同的历史时期将不同的东西构建成上限。
我有一个应用程序,我保留在git中,rails 3.2和资产管道一起部署到只有一个带有乘客的主机上。
考虑它,我基本上需要上限:
哦,废话,更可能是奇怪的事情:
做上述所有事情最简单,最简单,最可持续的方法是什么? 有什么我失踪? 如果我指定的某些标准不是标准的,我很乐意使用标准的最佳实践(可能有一两个例外,我确实希望每个部署都有一个git标记,即使这不是标准的最佳实践,尽管我认为它会是,但看着文档它是如何工作的)
这里有一个简单的答案吗?
编辑 :是的,我看了盖维基。 这可能是因为我很慢,但我找到了答案,没有我的问题。 甚至没有“入门”文件。 没有关于默认开箱即用的配方实际上的文档。 等等
更新 :我写了自己的指南后,找出它。 https://gist.github.com/2161449
那么,不必使用capistrano是一件幸事:-)。 我越来越不喜欢它,但公平地说,它已经变得更好了,这里的文档https://github.com/capistrano/capistrano/wiki/解决了大部分问题 - 关于RVM的部分可能就足够了替代rbenv。 您的配置应该与一个开箱即用的capfile相当。
编辑:是的,你需要自己做标记,但关键是想像你在capfile中写的方法只是系统命令(记住你可能没有你的普通shell路径和其他环境)。 按照其他git命令的例子,你会没事的。
编辑:更好的回答(也许:-)
gem install capistrano
(注意,通常这不属于你的Gemfile) capify .
创建app/Capfile
和app/config/deploy.rb
load 'deploy/assets'
myusername@github.com:yourrepo/yourproj.git
scm: git
(对吗?如果不是,同样的想法:上面的URL和SVN的这个或者其他) role :web "www.example.com"
,因为你的:db和:app都在一个盒子里,所以这些都是一样的 require "bundler/capistrano"
顶部的require "bundler/capistrano"
set :deploy_to, <remote installation path>
也许"/var/www"
cap deploy:setup
假设,安装程序会相应地配置您的服务器。 这里最可能的错误是您的当前机器需要ssh到远程机器的权限,并且远程机器需要访问源代码管理存储库。 公钥是你的朋友。
在此之后,工作流程是:
cap deploy migrations
(迁移部分只在必要时才需要) 大多数组织都有某种分段或测试服务器。 寻找“多阶段”来获得它,以便您可以进行cap test deploy
和cap 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