簡體   English   中英

Elastic Beanstalk上的502壞網關nginx + puma + rails 3.2

[英]502 bad gateway nginx + puma + rails 3.2 on Elastic Beanstalk

部署成功,一切都是綠色的。 但是當我們嘗試訪問應用程序URL時,它會出現502 Bad Gateway錯誤。

使用ps -aux | grep puma檢查美洲獅過程ps -aux | grep puma ps -aux | grep puma不會返回附加到puma服務器的任何進程,但pgrep返回以下內容。

$pgrep -fl puma
18009 su -s /bin/bash -c bundle exec puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
18031 ruby /opt/rubies/ruby-2.0.0-p598/bin/puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb

我已經嘗試了所有可能的組合,如每個其他論壇/博客或支持nginx / puma的網站所示。 以下是狀態。

  1. 默認配置 - 我們有UNIX://在nginx.conf和pumaconf.rb的UPSTREAM選項中使用的sock文件 - 這給出了502錯誤的gatway。 檢查時,美洲獅沒有運行,它每隔3分鍾重新啟動一次。
  2. 正如我們在DigitalOcean中使用它 - 將上述UPSTREAM配置URL更改為pumaconf.rb中的tcp://127.0.0.1:3000和conf.d / webapp.conf文件中的127.0.0.1:3000。 - 這也行不通,puma無法像上面那樣正常運行。

我的問題是,

  1. 為什么沒有控制與diff運行puma。 配置? 為什么我們必須始終使用UI,它無法按照其他標准配置選項正確運行服務?
  2. UI中沒有用於從UI更改/驗證的配置選項。 所以我們必須從SSH做到這一點。 但是,我們無法控制從控制台重啟PUMA。
  3. 每當美洲獅沒有運行時,我們都無法看到它所面臨的任何錯誤的任何日志。 這根本沒有用。

Puma即使使用默認配置也無法運行,所以nginx無法與Puma交談,所以EC2沒有意義!

如果您對此有任何疑問,請告訴我們如何解決此問題。

看到這個 - https://forums.aws.amazon.com/thread.jspa?messageID=608148&#608148

仍然沒有這個問題的答案,這就像我們的手被銬,並且無法改變任何配置!

UPDATE

AWS以某種方式停止並啟動PUMA,因為我在使用ps -ef|grep puma檢查時可以看到進程ID發生變化。 所以,我開始使用puma在另一個端口上工作並嘗試檢查它是否運行。

在另一個端口上啟動,然后從另一個使用wget http://127.0.0.1:3000訪問URL的控制台啟動。 它打印以下日志。

current]$ bundle exec puma -b tcp://127.0.0.1:3001
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://127.0.0.1:3001
Rails Error: Unable to access log file. Please ensure that /var/app/current/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
Use Ctrl-C to stop
2015-03-16 13:19:35 +0000: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2015-03-16 13:19:35 +0000: ENV: {"rack.version"=>[1, 1], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "CONTENT_TYPE"=>"text/plain", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"2.0.1", "GATEWAY_INTERFACE"=>"CGI/1.2"}

那么,是否必須使用SSL? 因為我認為默認情況下它沒有啟用。

我有這個問題上傳我的Rails應用程序后,我發現這條線(自動生成)上secrets.yml( 配置 > secrets.yml): secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

所以你必須將它作為環境變量添加到你的環境中。

在環境儀表板中,轉到配置 > 軟件 > 環境屬性,然后添加名為SECRET_KEY_BASE的新變量。

您可以設置任何值,但請確保它是安全密鑰。 這解決了我的問題,我希望它有所幫助。

我無法解決這個問題。 我們也應該只使用EC2 free實例而不是BeanStalk。

我們現在已經使用RDS遷移到Free EC2實例,並使用Capistrano和Nginx + Unicorn部署了rails應用程序。 雖然這並不容易[1] [2]但最終我們得到了它的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM