Tag: capistrano

如果任务失败,Capistrano不会回滚

我们使用Capistrano / Webistrano(Lee Hambley的railsless-deploy gem)将我们的PHP应用程序推送到生产服务器。 我有一些自定义任务在部署过程的各个部分中运行。 作为一个例子,我有任务试图停止并重新启动dockersolr实例。 但是,有时在部署过程中会失败,所以Capistrano将回滚整个部署并恢复到之前的版本。 这是一个痛苦。 🙂 我想告诉Capistrano忽略这些任务的返回结果,所以如果他们失败了,Capistrano就会继续下去,完成部署任务。 在事实发生之后,我很容易地向服务器ssh,并正确地终止并重新启动solr实例,而不必再次完成部署。 以下是部署脚本的一些相关部分: before "deploy:symlink", :solr_kill after "deploy:symlink", :solr_start, :solr_index task :solr_kill do run "cd #{current_path}/Base ; #{sudo} phing solr-kill" end task :solr_start do run "cd #{current_path}/Base ; #{sudo} phing solr-start" run "sleep 10" end task :solr_index do run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron" end

启动时启动delayed_job

我正在使用与capistrano的delayed_job,并希望通过使用'script / delayed_job start'启动Web应用程序启动时的delayed_job。 这样capistrano可以在部署时重新启动它。 如果服务器重新启动,那么我的delayed_jobs应该启动项目。 我怎样才能做到这一点? 我应该看看在环境文件中做这个还是作为一个初始化程序?

Capistrano和环境variables

我已经切换到使用环境variables进行configuration ,并且工作得非常好 – 除非我必须使用capistrano部署或运行​​任务。 Capistrano 3似乎执行了前缀为/usr/bin/env每个命令,这会清除通过.bashrc设置的所有环境variables。 编辑 – 在做更多的研究,这可能不是问题,这个问题可能是因为capistrano作为非login,非交互式shell执行,不加载.bashrc或.bash_profile 。 但是,仍然卡住了。 当capistrano执行任务时,确定环境variables的最佳方法是什么?

如何在生产中部署resque工人?

GitHub家伙最近发布了使用Redis的后台处理应用程序: http : //github.com/defunkt/resque http://github.com/blog/542-introducing-resque 我在当地工作,但我正在努力让它在生产中工作。 有没有人有一个: Capistrano食谱部署工人(控制工人数量,重新启动他们等) 部署的工作人员从主应用程序运行的地方分离机器,在这里需要什么设置? 得到Redis的生存在服务器上重新启动(我试图把它放在克朗,但没有运气) 你是如何将resque-web(他们优秀的监控应用程序)join你的部署的? 谢谢! PS我在Github上发布了一个关于这个问题,但没有回应。 希望有些大师可以帮助这个,因为我在部署方面不是很有经验。 谢谢!

使用Capistrano将Rails应用程序部署到多个服务器 – 最佳实践

我有一个rails应用程序,我需要部署到3个服务器 – machine1.com,machine2.com和machine3.com。 我希望能够一次将所有的机器部署到每台机器上,并且单独部署到每台机器上。 有人可以帮我一个骨架Capistranoconfiguration文件/食谱吗? 应该都在deploy.rb或者我应该在machine1.rb中分解出来吗? 我以为我在正确的轨道上让Capistrano接受命令行参数,但是当我尝试在命名空间中设置angular色时,它会窒息。 我将“hosts = 1,2,3”作为参数传入,并在分割命令后将angular色:app / web / db设置为“machine#{host} .com”,并进入每个do | {} … 无论如何,除了创build4个不同的deploy.rb文件并在运行cap之前对其进行重命名之外:每次部署时,我都很难过。 我希望能够做到以下几点: cap deploy:machine1:latest_version_from_svn cap deploy:all_machines:latest:version_from_svn 只是不知道它是否应该全部在deploy.rb中与命名空间分离,或者如果它应该被分解成多个* deploy **。rb文件。

我如何针对特定的提交SHA与capistrano部署

我想知道如何使用Capistrano在Git中针对特定的提交SHA进行部署? 应该是这样的 cap deploy –version=<sha targeted> 经过大量的search后,似乎无法find答案。

Capistrano – 如何把文件放在共享文件夹中?

我是新来的Capistrano ,我看到有共享文件夹和选项:linked_files 。 我认为共享文件夹是用来保持文件之间的版本。 但我的问题是,文件如何最终在共享文件夹? 另外,如果我想将另一个目录符号链接到当前目录,例如某个path下的静态文件夹,我该如何将它放在linked_dirs ? 最后如何将chmod 755设置为linked_files和linked_dirs。 谢谢。

如何检查在Capistrano中是否存在文件(在远程服务器上)?

像我在Googleverse看到的许多其他人一样,我成为File.exists?受害者File.exists? 陷阱,这当然会检查您的本地文件系统,而不是您正在部署的服务器。 我发现一个结果使用了一个shell黑客: if [[ -d #{shared_path}/images ]]; then … 但是这并不适合我,除非它很好地包裹在Ruby方法中。 有谁有解决这个优雅?

我如何从另一个调用一个Capistrano任务?

我如何从另一个调用一个Capistrano任务? 例如: task :foo do # stuff end task :bar do # INVOKE :foo end

Capistrano部署问题

当我input cap production deploy 我明白了 Capfile locked at 3.1.0, but 3.2.0 is loaded 当我卸载capistrano 3.2.0我得到 Could not find capistrano-3.2.0 in any of the sources Run `bundle install` to install missing gems. 我gemfile有 gem 'capistrano', '~> 3.1' gem 'capistrano-rails', '~> 1.1' 和Capfile require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/bundler' require 'capistrano/rails/assets' 在这种情况下做什么?