我正在开始使用PHP开发一个新项目,我很乐意从其他开发人员那里获得有关他们首选的PHP部署策略的反馈.我希望自动化一些事情,以便一旦提交更改,就可以将它们快速迁移到开发或生产服务器.
我有使用Capistrano和Ruby进行部署的经验以及一些基本的shell脚本.
在我第一次独自潜水之前,听听其他人在他们的项目中如何处理这个问题会很棒.
目前,开发人员处理站点的本地安装并将更改提交到subversion存储库.通过从svn导出标记版本并将其上载到服务器来进行初始部署.
通常通过手动上载更改的文件来进行其他更改.
通常在使用capistrano时,我会从已部署的应用程序中手动删除旧版本.我知道你可以运行,cap deploy:cleanup
但仍然有5个版本.这是它的目的吗?还有另一种方法可以将旧版本清理到之前的1次部署吗?
我正在使用capistrano来部署RoR应用程序.代码库位于git存储库中,分支广泛用于开发.Capistrano使用deploy.rb
文件进行设置,其中一个是要部署的分支.
我的问题是这样的:比方说,我创建了一个新的分支一个从主.部署文件将引用master分支.我编辑它,所以可以部署A来测试环境.我完成了该功能,并将分支A合并到主服务器中.由于deploy.rb
从文件一个是新鲜的,它被合并了,现在deploy.rb
在主分支引用一个.是时候再次编辑了.
这是很多看似不必要的手动编辑 - 参数应始终与当前分支名称匹配.最重要的是,每次都很容易忘记编辑设置.
什么是自动化这个过程的最佳方法?
编辑:结果已经完成了我所需要的人:
今天早上我有机会将一个git存储库的一个分支部署到一个临时服务器,但是没有最模糊的想法.通过capistrano源代码快速搜索显示我可以
:branch "branch_name"
在部署脚本中使用set .我尝试了它,它的工作原理.然后我想我需要对所有分支进行类似的更改.当然,我是一个懒惰的草皮,并想知道是否有更好的方法.如果您不熟悉git,git branch命令的输出是一个带有星号的分支列表,标记当前在本地计算机上签出的星号.例如:
Run Code Online (Sandbox Code Playgroud)> git branch * drupal_authentication fragment_caching master
所以,我想,如果我只是解析输出并搜索标记为当前的分支:
Run Code Online (Sandbox Code Playgroud)set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
现在,我可以从单个共享的部署脚本部署本地计算机上当前的任何分支.
我已经有一个deploy.rb可以在我的生产服务器上部署我的应用程序.
我的应用程序包含一个自定义rake任务(lib/tasks目录中的.rake文件).
我想创建一个能够远程运行该rake任务的上限任务.
INFO [050fe961] Running mkdir -p /home/rails/rails-
capistrano/releases/20140114234157 on staging-rails
DEBUG [050fe961] Command: cd /home/rails/rails-capistrano/repo && ( PATH=/opt/ruby/bin:$PATH GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rails/git-ssh.sh mkdir -p /home/rails/rails-capistrano/releases/20140114234157 )
INFO [050fe961] Finished in 0.142 seconds with exit status 0 (successful).
INFO [2dea2fe5] Running git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157 on staging-rails
DEBUG [2dea2fe5] Command: cd /home/rails/rails-capistrano/repo && ( PATH=/opt/ruby/bin:$PATH GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/rails/git-ssh.sh git archive feature/Capistrano | tar -x -C /home/rails/rails-capistrano/releases/20140114234157 )
DEBUG [2dea2fe5] fatal: Not a valid object name
DEBUG [2dea2fe5] tar: This does not …
Run Code Online (Sandbox Code Playgroud) Capistrano食谱中"角色"的目的和功能是什么?当我查看样本食谱时,我经常会看到这样的事情:
role :app, 'somedomain.com'
role :web, 'somedomain.com'
role :db, 'somedomain.com', :primary => true
Run Code Online (Sandbox Code Playgroud)
所以看起来角色基本上是Capistrano执行命令的服务器.如果是这种情况,那为什么它会被称为"角色"而不是"主机"或"服务器"?
在上面的例子中,角色:app
和:web
角色之间有什么区别?
该:primary => true
选项有什么作用?
我对bundler和capistrano很新,我试图将它们一起使用.当我尝试部署时,我收到消息:
您正在尝试在更改Gemfile后以部署模式安装.在别处运行`bundle install'并将更新的Gemfile.lock添加到版本控制.
我不知道如何满足抱怨的系统,我不明白为什么抱怨会出现,因为我在文档中读到:
如果Gemfile.lock确实存在,并且您已更新Gemfile(5),则bundler将使用Gemfile.lock中的依赖项来处理您未更新的所有gem,但会重新解析您更新的gem的依赖项.您可以在CONSERVATIVE UPDATING下找到有关此更新过程的更多信息.
我认为这意味着Bundler可以处理我的Gemfile不是它预期的事实.有帮助吗?
规格:Ruby 1.9.3,Rails 3.2.3,Capistrano 2.12.0,Bundler 1.1.4,Windows 7,部署到Posix机器.
编辑:我的Gemfile包含如下逻辑块:
unless RbConfig::CONFIG['host_os'] === 'mingw32'
# gem 'a' ...
end
Run Code Online (Sandbox Code Playgroud) 尝试运行时出现以下错误cap production deploy
.
DEBUG [dc362284] Bundler::GemNotFound: Could not find json-1.8.1.gem for installation
DEBUG [dc362284] An error occurred while installing json (1.8.1), and Bundler cannot continue.
DEBUG [dc362284] Make sure that `gem install json -v '1.8.1'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
值得注意的是,此部署正在运行,而不是我升级到Ruby 2.1.0以消除编码错误.我本地升级,工作正常.我跑rvm install 2.1.0
,并rvm use 2.1.0
随后改变了我的.ruby-version
文件,以反映该红宝石升级.
该bundle install
命令在本地工作,但当我ssh到目标服务器并运行此命令时,会产生相同的上述错误.
如果我跑,gem list
我可以在宝石列表中看到这一点.
...
jquery-rails (3.0.4)
json (1.8.1)
less (2.3.2)
...
Run Code Online (Sandbox Code Playgroud)
如果我在gem install json -v '1.8.1'
本地服务器上尝试推荐的解决方案,并在目标服务器上获得以下输出:
Building native extensions. This could …
Run Code Online (Sandbox Code Playgroud) 我尝试使用"上限回滚"但我收到以下错误:
$ cap回滚
任务"回滚"不存在
我需要做一些额外的设置才能让回滚工作吗?
我最近升级到Ubuntu 9.04,我有使用宝石的问题.我使用apt-get安装了Ruby,Rubygems和Rails.该rails
命令确实有效.
然后我安装了capistrano和其他宝石,比如heroku.为了做到这一点,我使用了命令:
sudo gem install XXX
Run Code Online (Sandbox Code Playgroud)
当我想使用该cap
命令时,它不起作用:
bash: cap: command not found
Run Code Online (Sandbox Code Playgroud)
它与其他gem命令相同.
我有特别的事情可以让gem命令工作吗?
capistrano ×10
ruby ×3
bundler ×2
capistrano3 ×1
deployment ×1
gem ×1
git ×1
php ×1
rake ×1
rubygems ×1
ubuntu ×1