我已经开发 Rails 有一段时间了,但直到现在都在避免使用 capistrano。
试图弄清楚如何开始,我对使用 Assets 管道部署的相当“标准”rails 3.x 的最佳 capistrano 配方感到困惑。也许是因为在谷歌上环顾四周,人们可以从历史的各个部分找到“答案”,不同的历史时期,不同的东西被内置到帽子里。
我有一个我保存在 git 中的应用程序,rails 3.2,带有 Assets 管道,部署到只有一个有乘客的主机。
想一想,我基本上需要上限:
哦,废话,还有一件可能很奇怪的事情:
让 cap 做所有这些事情的最标准、最简单、最简单、最可维护的方法是什么?有什么我想念的吗?如果我指定的某些内容不是标准的,我很乐意改用标准的最佳实践(可能有一两个异常(exception),我真的希望每次部署都有一个 git 标签,即使这不是标准的最佳实践,虽然我认为它会是,但在查看文档如何工作时感到困惑)
这里有一个简单的答案吗?
编辑 : 是的,我看过 Cap wiki。这可能是因为我很慢,但我在那里找到了我的问题的答案。甚至没有“入门”文档。没有文档说明默认开箱即用的上限配方实际上做了什么。等等
更新 : 搞清楚后自己写了攻略。 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"
在顶部 set :deploy_to, <remote installation path>
也许 "/var/www"
cap deploy:setup
假设,安装程序将相应地配置您的服务器。这里最可能的错误是您当前的机器需要 ssh 到远程机器的权限,而远程机器需要访问源代码控制存储库。公钥是你的 friend 。
在此之后,工作流程是:
cap deploy migrations
(迁移部分只有在你做过的时候才需要)大多数组织都有某种登台或测试服务器。寻找“多阶段”来获得它,这样你就可以做到
cap test deploy
和 cap staging deploy
等等要在 git 上部署一个分支(我认为是一个标签),它是
cap -S <branch/tagname> deploy
(确保它是大写的 S,可能是小写)。一旦开始执行此操作,您可能会在部署之前或之后做一些事情——例如发送电子邮件、重新生成站点地图、备份数据库等等。使用 before 或 after Hook 来编写您自己的任务。
所以 capistrano 最糟糕的部分是所有的文档都假设你知道它到底做了什么。简而言之,它使用 ssh(ruby 的 net-ssh)从您部署的任何本地工作站在远程服务器上执行命令。它查看源代码树的头部(或标签或分支,如果指定),将其拉入服务器上的新位置,执行其他任何操作(迁移、 Assets 预编译)并准备好应用程序;一旦看起来不错,它就会更改符号链接(symbolic link)(例如
/var/www/current
以指向新位置,然后(在乘客的情况下)调用 touch app/tmp/restart.txt
以使服务器重新启动。更好的?
关于ruby-on-rails - Capistrano,Rails 3.2,标准食谱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774062/