如何在 AWS OpsWorks 上调试 Ruby On Rails?

Posted

技术标签:

【中文标题】如何在 AWS OpsWorks 上调试 Ruby On Rails?【英文标题】:How to debug Ruby On Rails on AWS OpsWorks? 【发布时间】:2014-08-16 08:02:30 【问题描述】:

经过 Serval 天测试,了解如何在 AWS EC2 上部署我的 ROR 项目。 橡胶,eb,最后我决定使用 OPSWORKS,因为 video in youtube。 但是部署还是很辛苦的。

好的,我的问题是:

我知道

    在 web 控制台中,我们可以获取部署日志。 通过ssh,我们可以得到路径下的[apptest].access.log,error.log,access.log /var/log/nginx/(我用 nginx 和 Unicorn 测试)

但下面所有的都是关于部署的日志,很少有关于访问网站的日志/信息。 例如:(test.access.log)

133.255.255.124 - - [25/Jun/2014:15:10:03 +0000] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (Khtml, like Gecko) Version/7.0.4 Safari/537.76.4"
133.255.255.124 - - [25/Jun/2014:15:10:19 +0000] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"

当我得到 500 时,我在哪里可以找到有关此信息的详细信息? 这是 nginx 中的 error.log

 1. 2014/06/25 13:35:59 [emerg] 5502#0: still could not bind()
 2. 2014/06/25 15:23:06 [crit] 11593#0: *2 connect() to
    unix:/srv/www/test/shared/sockets/unicorn.sock failed (2: No such
    file or directory) while connecting to upstream, client:
    133.255.255.124, server: test, request: "GET / HTTP/1.1", upstream: "http://unix:/srv/www/test/shared/sockets/unicorn.sock:/", host:
    "55.218.118.37"

你可以发现在500返回期间,error.log信息是没用的,access.log也没什么可显示的。

在访问测试网站时,我在哪里可以获得详细的调试信息,例如 tomcat 服务器 非常感谢。

这是 unicorn.stderr.log 和 production.log unicorn.stdout.log 中的内容 没什么可显示的。即使我在 production.rb 中设置了 config.log_level = :debug 并重新启动 Web 服务器。

I, [2014-06-25T23:45:18.172877 #6436]  INFO -- : executing ["/home/deploy/.bundler/test/ruby/2.0.0/bin/unicorn_rails", "--env", "production", "--daemonize", "-c", "/srv/www/test/shared/config/unicorn.conf", 10=>#<Kgio::UNIXServer:fd 10>] (in /srv/www/test/releases/20140625234506)
I, [2014-06-25T23:45:19.196006 #6436]  INFO -- : inherited addr=/srv/www/test/shared/sockets/unicorn.sock fd=10
I, [2014-06-25T23:45:19.196505 #6436]  INFO -- : Refreshing Gem list
I, [2014-06-25T23:45:23.769647 #6449]  INFO -- : worker=0 ready
I, [2014-06-25T23:45:23.811102 #6436]  INFO -- : master process ready
I, [2014-06-25T23:45:23.848092 #6452]  INFO -- : worker=1 ready
I, [2014-06-25T23:45:24.129596 #5830]  INFO -- : reaped #<Process::Status: pid 5852 exit 0> worker=0
I, [2014-06-25T23:45:24.129878 #5830]  INFO -- : reaped #<Process::Status: pid 5855 exit 0> worker=1
I, [2014-06-25T23:45:24.129967 #5830]  INFO -- : master complete

【问题讨论】:

【参考方案1】:

登录后您需要执行以下操作:

sudo su deploy
cd /srv/www/#application_name/shared/log/

文件存储在:

/srv/www/#application_name/shared/log
➜  log  ls -lsh *.log
 32K -rw-r--r-- 1 deploy www-data  32K Jun 25 20:45 cron-error.log
4.0K -rw-r--r-- 1 deploy www-data 1.6K Jun 25 20:30 cron.log
192K -rw-r--r-- 1 deploy www-data 188K Jun 25 20:45 newrelic_agent.log
 48M -rw-r--r-- 1 deploy www-data  47M Jun 25 20:55 staging.log
   0 -rw-r--r-- 1 deploy www-data    0 Jun 24 06:46 unicorn.stderr.log
4.0K -rw-r--r-- 1 deploy www-data 3.1K Jun 25 08:49 unicorn.stdout.log

注意:#application_name 是您的应用程序短代码。

【讨论】:

在我的 dir(shared/log) 中有 3 个 production.log unicorn.stderr.log unicorn.stdout.log 您在进行更改后部署了吗? 是的,但还是不行。我对 ruby​​ 和 rails 比较陌生。也许开始太难了! 重启网络服务器并在需要时重启 出于某种原因,在我在 Opsworks 中部署 Rails 应用程序时,尽管具有正确的 Unicorn 配置,但它会在 unicorn.stderr.log 中记录所有 Rails 活动(包括访问),这就是为什么 production.log 和unicorn.stdout.log 是空的。检查 unicorn.stderr.log 看看你是不是这样。

以上是关于如何在 AWS OpsWorks 上调试 Ruby On Rails?的主要内容,如果未能解决你的问题,请参考以下文章

特定的 nodejs 版本,opsworks_ruby,aws,chef 12

AWS OpsWorks:成功的 Ruby on Rails 默认层部署在浏览器中显示 404 错误

如何在 AWS Opsworks App 上使用在 AWS Certificate Manager 上购买的证书?

如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?

如何在 AWS Opsworks 上设置 EC2 标签

使用 AWS OpsWorks 设计 gem 初始化