ruby-on-rails - Capistrano,Rails 3.2,标准食谱?

标签 ruby-on-rails capistrano

我已经开发 Rails 有一段时间了,但直到现在都在避免使用 capistrano。

试图弄清楚如何开始,我对使用 Assets 管道部署的相当“标准”rails 3.x 的最佳 capistrano 配方感到困惑。也许是因为在谷歌上环顾四周,人们可以从历史的各个部分找到“答案”,不同的历史时期,不同的东西被内置到帽子里。

我有一个我保存在 git 中的应用程序,rails 3.2,带有 Assets 管道,部署到只有一个有乘客的主机。

想一想,我基本上需要上限:

  • 从 git 部署?
  • 在 git 中为部署创建一个标签(和/或使用部署分支?无论是最标准的上限,如果有这样的事情)
  • 捆绑安装--部署
  • rake 分贝:迁移
  • rake Assets :预编译
  • touch tmp/restart.txt

  • 哦,废话,还有一件可能很奇怪的事情:
  • 认为我将在部署服务器上使用系统范围的 rbenv 安装。不确定这意味着什么。

  • 让 cap 做所有这些事情的最标准、最简单、最简单、最可维护的方法是什么?有什么我想念的吗?如果我指定的某些内容不是标准的,我很乐意改用标准的最佳实践(可能有一两个异常(exception),我真的希望每次部署都有一个 git 标签,即使这不是标准的最佳实践,虽然我认为它会是,但在查看文档如何工作时感到困惑)

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

    编辑 : 是的,我看过 Cap wiki。这可能是因为我很慢,但我在那里找到了我的问题的答案。甚至没有“入门”文档。没有文档说明默认开箱即用的上限配方实际上做了什么。等等

    更新 : 搞清楚后自己写了攻略。 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
  • 您正在使用 Assets 管道,因此在 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 都在一个盒子上,所以它们是相同的
  • 您正在使用乘客,因此请按照指示取消注释这些行。
  • 不确定,但您可能需要 require "bundler/capistrano"在顶部
  • 你需要一个 set :deploy_to, <remote installation path>也许 "/var/www"
  • 按照指南中的其他步骤
  • 假设在这些和我错过的步骤之后,检查所有这些,并确保您的应用程序已 checkin (如果 git 则推送),然后执行 cap deploy:setup

  • 假设,安装程序将相应地配置您的服务器。这里最可能的错误是您当前的机器需要 ssh 到远程机器的权限,而远程机器需要访问源代码控制存储库。公钥是你的 friend 。

    在此之后,工作流程是:
  • 进行更改
  • 本地测试
  • 提交并推送到 git
  • cap deploy migrations (迁移部分只有在你做过的时候才需要)

  • 大多数组织都有某种登台或测试服务器。寻找“多阶段”来获得它,这样你就可以做到 cap test deploycap 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/

    相关文章:

    ruby-on-rails - friendly_id slug 未生成,但正在调用方法

    ruby-on-rails - 使用电子邮件 SendGrid 发送发件人姓名 - Rails

    ruby-on-rails - 没有 gem 的分页 Next, Previous, Name.order( :id). limit(10).offset(0) 的按钮

    ruby-on-rails - 访问从 Rails 中的日期助手发送的 date() 变量

    ruby-on-rails - 如何为 aws ec2 ubuntu 服务器提供 Capistrano rails 3.1 应用程序部署的密码?

    ruby - ‘bundle’ 没有这样的文件或目录

    ruby-on-rails - Rails - 通过 Rails Routing 更改 URL 标题

    ruby-on-rails - 上限调用和 sudo

    Capistrano - 机器名称

    ruby-on-rails - capistrano 上没有输出