使用橡胶在ec2上部署后,继续获得504网关超时

时间:2012-02-22 16:22:51

标签: ruby-on-rails deployment amazon-ec2 passenger

我使用橡胶宝石在ec2上部署我的应用程序。 我按照这里的说明进行操作:http://ramenlab.wordpress.com/2011/06/24/deploying-your-rails-app-to-aws-ec2-using-rubber/ 该过程似乎成功完成,但当我尝试使用该应用程序时,我不断获得504网关超时。 为什么会发生这种情况?如何解决?

2 个答案:

答案 0 :(得分:1)

Matthew Conway的回答(转载如下):https://groups.google.com/forum/?fromgroups#!searchin/rubber-ec2/504/rubber-ec2/AtEoOf-T9M0/zgda0Fo1qeIJ

注意:即使使用此代码,您也需要执行以下操作:

  

> cap deploy:update

     

> FILTER = app01,app02 cap deploy:restart

     

> FILTER = app03,app04 cap deploy:restart


我认为这是一个rails应用程序?众所周知,铁轨堆栈加载缓慢,因此加载时间的延迟可能就是您所看到的。乘客应该在零停机时间功能v3的情况下做得更好,但他们似乎已经违背了这一点,并且只会在未来某个未定义的点上提供它作为某些未定义付费版本的一部分。

我所做的是拥有多个应用服务器实例并以串行方式重新启动它们,以便我可以继续为其中一个提供流量,而其他实例正在重新启动。不适用于单个实例,但大多数生产设置无论如何都需要多个实例来实现冗余/可靠性。这当前不是橡胶的一部分,但是我已经为我的应用程序部署了脚本设置,并且会在某些时候将其合并 - 我的配置看起来如下所示。

马特

橡胶passenger.yml:

roles:
  passenger:
    rolling_restart_port: "#{passenger_listen_port}"

  web_tools:
    rolling_restart_port: "#{web_tools_port}"

部署-apache.rb:

on :load do
  rubber.serial_task self, :serial_restart, :roles => [:app, :apache] do
    rsudo "service apache2 restart"
  end
  rubber.serial_task self, :serial_reload, :roles => [:app, :apache] do
    # remove file checked by haproxy to take server out of pool, wait some
    # secs for haproxy to realize it
    maybe_sleep = " && sleep 5" if RUBBER_ENV == 'production'
    rsudo "rm -f #{previous_release}/public/httpchk.txt #{current_release}/public/httpchk.txt#{maybe_sleep}"

    rsudo "if ! ps ax | grep -v grep | grep -c apache2 &> /dev/null; then service apache2 start; else service apache2 reload; fi"

    # Wait for passenger to startup before adding host back into haproxy pool
    logger.info "Waiting for passenger to startup"

    opts = get_host_options('rolling_restart_port') {|port| port.to_s}
    rsudo "while ! curl -s -f http://localhost:$CAPISTRANO:VAR$/ &> /dev/null; do echo .; done", opts

    # Touch the file so that haproxy adds this server back into the pool.
    rsudo "touch #{current_path}/public/httpchk.txt#{maybe_sleep}"
  end
end

after "deploy:restart", "rubber:apache:reload"


desc "Starts the apache web server"
task :start, :roles => :apache do
  rsudo "service apache2 start"
  opts = get_host_options('rolling_restart_port') {|port| port.to_s}
  rsudo "while ! curl -s -f http://localhost:$CAPISTRANO:VAR$/ &> /dev/null; do echo .; done", opts
  rsudo "touch #{current_path}/public/httpchk.txt"
end

答案 1 :(得分:1)

我得到了同样的错误并解决了问题。 这是“haproxy”超时。它是由Rubber安装的负载平衡器。 设置为30000ms,您应该在橡胶配置文件中更改它。

祝你好运!