首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rails使用capistrano来部署和重新启动?

rails使用capistrano来部署和重新启动?
EN

Stack Overflow用户
提问于 2015-12-11 03:15:35
回答 1查看 1.8K关注 0票数 1

我试着用capistrano来部署我的应用程序,所有的问题都是固定的,除了.

我无法在部署之后自动重新启动服务器,下面是我的代码:

宝石档案:

代码语言:javascript
运行
复制
gem 'capistrano-rails', '~> 1.1.3'#, group: :development
gem 'capistrano', '~> 3.1'
gem 'capistrano-rbenv', '~> 2.0'
gem 'capistrano-bundler', '~> 1.1.2'
gem 'capistrano-passenger', '~> 0.1.1'
gem 'capistrano3-delayed-job', '~> 1.0'
gem 'capistrano3-nginx', '~> 2.0'

capfile:

代码语言:javascript
运行
复制
require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/passenger'
require 'capistrano/delayed-job'
require 'capistrano/nginx'

Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

deploy.rb:

代码语言:javascript
运行
复制
require "whenever/capistrano"
`ssh-add` # need this to make key-forwarding work

set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }

set :application, 'devops'
set :repo_url, 'mygit'

set :rbenv_type, :user 
set :rbenv_ruby, "2.2.2"
set :rbenv_path, "/home/john/.rbenv"
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w(rake gem bundle ruby rails)
set :rbenv_roles, :all 

set :deploy_to, '/home/john/devops'
set :log_level, :debug

set :linked_dirs, fetch(:linked_dirs, []).push("bin", "log", "tmp/pids", "tmp/cache", "tmp/sockets", "vendor/bundle", "public/system") 

deploy.rb

代码语言:javascript
运行
复制
namespace :deploy do

# I try following code:
#---
after :deploy, cap nginx:restart 
run "sudo /etc/init.d/nginx restart"
run "touch tmp/restart.txt"
after :deploy, cap production passenger:restart
after :deploy, cap production deploy:restart
#---

# invoke 'delayed_job:restart'

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      within release_path do
        execute :rake, 'cache:clear'
      end
    end
  end
end

当我在本地输入"touch tmp/restart.txt“(在帽生产部署之后),我的页面不会随着修改而改变,我总是需要使用"sudo /etc/init.d/nginx重新启动”,如何解决这个问题?

我尝试这样做,但也没有响应(没有错误消息):

代码语言:javascript
运行
复制
after 'deploy:publishing', 'deploy:restart'

namespace :deploy do

    desc "Restart application"

    after :publishing, 'deploy:restart'

  task :restart do
    on roles(:app), in: :sequence, wait: 1 do
      execute :touch, release_path.join("tmp/restart.txt")
    end
  end

end
EN

回答 1

Stack Overflow用户

发布于 2015-12-11 12:51:58

要让乘客重新启动应用程序,您应该在服务器上使用touch/restart.txt,而不是本地的:

代码语言:javascript
运行
复制
namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Restarts Phusion Passenger
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

end

重新启动nginx本身是没有意义的,除非您正在升级乘客。

此外,重新启动并不是即时的,请求只有在启动后才被路由到新代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34215528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档