【问题标题】:Error 500 access in rails app with puma and nginx使用 puma 和 nginx 在 Rails 应用程序中访问错误 500
【发布时间】:2016-02-10 06:19:04
【问题描述】:

我有 6 个容器来创建自己的微服务应用程序。在这个project 我有一个示例应用程序。当我尝试访问 URL (http://localhost:80/) 时出现问题,浏览器返回错误 500 并显示消息:

return 很抱歉,出了点问题。如果你是 应用程序所有者检查日志以获取更多信息。

列出容器:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS                      NAMES
69ee0ef25faa        falcon_nginx        "/usr/sbin/nginx"        59 seconds ago       Up 10 seconds                   0.0.0.0:80->80/tcp         falcon_nginx_1
411e41943a35        falcon_web          "foreman start"          About a minute ago   Up 11 seconds                   0.0.0.0:3000->3000/tcp     falcon_web_1
95de66fe7aae        redis               "/entrypoint.sh redis"   About a minute ago   Up 12 seconds                   6379/tcp                   falcon_redis_1
7693b7e2d2eb        memcached:latest    "/entrypoint.sh memca"   About a minute ago   Up 12 seconds                   0.0.0.0:11211->11211/tcp   falcon_memcached_1
020566c4a77a        mysql:latest        "/entrypoint.sh mysql"   About a minute ago   Up 12 seconds                   0.0.0.0:3306->3306/tcp     falcon_db_1
7bf8176503f4        busybox             "true"                   About a minute ago   Exited (0) About a minute ago                              mysql_data

日志:

web_1       | 14:34:04 web.1  | started with pid 32
web_1       | 14:34:04 log.1  | started with pid 33
web_1       | 14:34:04 log.1  | ==> log/puma.stderr.log <==
web_1       | 14:34:04 log.1  | === puma startup: 2015-11-05 10:39:01 -0300 ===
web_1       | 14:34:04 log.1  | === puma startup: 2015-11-09 14:33:16 +0000 ===
web_1       | 14:34:04 log.1  | 
web_1       | 14:34:04 log.1  | ==> log/development.log <==
web_1       | 14:34:04 log.1  | 
web_1       | 14:34:04 log.1  | ==> log/puma.stdout.log <==
web_1       | 14:34:04 log.1  | [17288] - Gracefully shutting down workers...
web_1       | 14:34:04 log.1  | [17288] === puma shutdown: 2015-11-05 10:39:07 -0300 ===
web_1       | 14:34:04 log.1  | [17288] - Goodbye!
web_1       | 14:34:04 log.1  | === puma startup: 2015-11-09 14:33:16 +0000 ===
web_1       | 14:34:04 log.1  | [31] * Starting control server on unix:///tmp/puma-status-1447079596225-31
web_1       | 14:34:04 log.1  | [31] - Gracefully shutting down workers...
web_1       | 14:34:04 log.1  | [39] Early termination of worker
web_1       | 14:34:04 log.1  | [43] Early termination of worker
web_1       | 14:34:04 log.1  | [31] === puma shutdown: 2015-11-09 14:33:24 +0000 ===
web_1       | 14:34:04 log.1  | [31] - Goodbye!
web_1       | 14:34:05 web.1  | [32] Puma starting in cluster mode...
web_1       | 14:34:05 web.1  | [32] * Version 2.11.2 (ruby 2.1.5-p273), codename: Intrepid Squirrel
web_1       | 14:34:05 web.1  | [32] * Min threads: 1, max threads: 16
web_1       | 14:34:05 web.1  | [32] * Environment: development
web_1       | 14:34:05 web.1  | [32] * Process workers: 2
web_1       | 14:34:05 web.1  | [32] * Phased restart available
web_1       | 14:34:05 web.1  | [32] * Listening on unix:///home/app/tmp/sockets/puma.sock
web_1       | 14:34:05 web.1  | [32] Use Ctrl-C to stop
web_1       | 14:34:05 log.1  | === puma startup: 2015-11-09 14:34:05 +0000 ===
web_1       | 14:34:05 log.1  | 
web_1       | 14:34:05 log.1  | ==> log/puma.stderr.log <==
web_1       | 14:34:05 log.1  | === puma startup: 2015-11-09 14:34:05 +0000 ===
web_1       | 14:34:05 log.1  | 
web_1       | 14:34:05 log.1  | ==> log/puma.stdout.log <==
web_1       | 14:34:05 log.1  | [32] * Starting control server on unix:///tmp/puma-status-1447079645129-32
web_1       | 14:34:09 log.1  | [32] - Worker 1 (pid: 44) booted, phase: 0
web_1       | 14:34:09 log.1  | [32] - Worker 0 (pid: 40) booted, phase: 0

Nginx 站点:

upstream rails {
  server web fail_timeout=0;
}

server {
  listen 80;
  client_max_body_size 2M;
  server_name localhost;
  keepalive_timeout 5;
  root /home/app/public;
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  location ~ ^/(assets)/  {
    gzip_static on;
    expires     max;
    add_header  Cache-Control public;
  }

  location / {
    try_files $uri/index.html $uri.html $uri @app;
    error_page 404              /404.html;
    error_page 422              /422.html;
    error_page 500 502 503 504  /500.html;
    error_page 403              /403.html;
  }

  location @rails {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    proxy_pass http://rails;
  }

  location = /favicon.ico {
    expires    max;
    add_header Cache-Control public;
  }
}

更多详情请查看project

Docker version 1.8.1
docker-compose version: 1.4.0

感谢您的帮助:)

【问题讨论】:

  • nginx 日志中有什么?
  • @japed nginx 不返回任何错误
  • 这些log/puma.stderr.loglog/puma.stdout.log 怎么样?它们列在您上面的日志中,我想他们在那里记录了什么?
  • @japed 是的,请检查我的问题中的 Log
  • 您的问题是哪条日志?

标签: ruby-on-rails nginx docker puma


【解决方案1】:

你的 nginx 配置有错误:

try_files $uri/index.html $uri.html $uri @app;

试试这个:

try_files $uri/index.html $uri.html $uri @rails;

【讨论】:

  • 是的,完美。看过了,忘记改正了。也谢谢!!。
  • 50/50,在你的帮助下看看我的解决方案:)
【解决方案2】:

好的,我在@ehoffmann 的帮助下找到了问题

  1. 作为 cmets @ehoffmann,我已将 app 更改为 rails
  2. puma 和 nginx 之间的通信必须通过 tcp。我将docker-compose.yml 线command: foreman start 更改为command: bundle exec puma -e development -p 3000

日志:Listening on tcp://0.0.0.0:3000

【讨论】:

  • 好的,如果你想保持套接字通信,你可以保留foreman start,并在nginx.conf上游部分将server web fail_timeout=0;替换为server unix:///home/app/tmp/sockets/puma.sock;
  • @ehoffmann 但请记住,nginx 是一个容器,而 puma 是另一个容器,容器之间的通信是 tcp。
  • 是的,但你的 docker-compose.yml 中有一个 volume_from: web。使用此配置,您可以直接从您的 nginx 容器中访问/home/app/tmp/sockets/puma.sock
猜你喜欢
  • 2015-12-21
  • 2016-10-12
  • 1970-01-01
  • 2017-03-08
  • 2018-01-30
  • 2020-04-22
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多