部署 有没有遇到部署之后,延时起作用的情况

assassinpig · 2014年03月28日 · 最后由 Victor 回复于 2014年03月30日 · 2358 次阅读

各位有没有遇到部署之后,延时起作用的情况,求原因啊? 实际物理机,都说是没有缓存的.... 睡一觉之后发现居然起作用了,看到那页面的时候,深切感受到什么叫做'坑爹'

你是怎么部署的?有没有记得重启服务器?又或者只是你本地缓存?

如果按 ctrl+f5 刷新后就更新了 看看是不是你的 http server 设置了缓存。

缓存也有两种,一种添加 header,缓存在浏览器 另一种是反向代理的缓存

子进程没有被 kill

#1 楼 @Martin91 nginx + passager + capistrno #3 楼 @Victor 是指 nginx 的子进程?

#3 楼 @Victor 额,是 passager 的吧?

试着在项目目录下使用 touch tmp/restart.txt,结果好像很不幸的成功了 #1 楼 @Martin91 #2 楼 @cxh116 #3 楼 @Victor 感谢各位,以上排名不分先后 Orz~

#5 楼 @assassinpig FYI, Passenger 一般都是线程模型的,没有子进程的概念。Unicorn 才是多进程的,才会有子进程。

#6 楼 @assassinpig touch tmp/restart.txt就是强制 passenger 重载了你的项目。passenger 启动后会读取你的项目代码放在内存中,如果部署完没有重启 Passenger,内存中的代码就得不到更新,你自然看不到最新代码。所以部署完,都要记得执行touch tmp/restart.txt,这个操作可以在config/deploy.rb文件里完成,最后的代码就是一个示例。 具体原因看这个 为什么在 rails 项目中 touch /tmp/restart.txt 这个文件就可以达到更新服务的目的?

另外,不知道你的 Capistrano 版本是 2 还是 3,如果是 2的话,deploy 脚本应该是这样的:

namespace :deploy do
  # some other tasks...

  desc 'Restart application'
  task :restart, :roles => :app do
    run "touch #{current_path}/tmp/restart.txt"
  end
end

capistrano v3提供了一套新的 DSL,新的 deploy 脚本应该是:

namespace :deploy do
  # some other tasks...

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号