如何在 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 上购买的证书?