【问题标题】:AWS OpsWorks: Successful Ruby on Rails default layer deployment shows 404 error in browserAWS OpsWorks:成功的 Ruby on Rails 默认层部署在浏览器中显示 404 错误
【发布时间】:2014-01-10 03:32:19
【问题描述】:
没有在 AWS OpsWorks 中部署 Rails 应用程序。完全困惑如何做到这一点!谁能告诉我部署一个 RoR 应用程序需要多少实例?
我创建了“Rails App Server”实例,它看起来不错。而这里我使用了 nginx 和 Unicorn 作为 Rails Stack。
之后,我从 git repo 添加了一个应用程序。然后部署该应用程序。并且日志显示它已成功部署。
但在公共 IP 中显示的是 404 Not Found Error - nginx!
任何帮助都将不胜感激。
【问题讨论】:
标签:
ruby-on-rails
amazon-web-services
nginx
ruby-2.0
aws-opsworks
【解决方案1】:
我遇到了这个问题,结果发现默认虚拟主机 /etc/nginx/sites-enabled/000-default 符号链接在部署期间没有被删除。
404 实际上是 nginx 寻找默认虚拟主机中任何内容的公共根目录,如 /var/logs/nginx/error.log 中所示
2015/12/23 21:46:05 [error] 3839#0: *15 "/var/www/nginx-default/index.html" is not found (2: No such file or directory), client: 127.0.0.1, server: rails-app1, request: "GET / HTTP/1.1", host: "localhost"
更糟糕的是,它会在每次 OpsWorks 部署后回来。删除该链接为我解决了问题。
为了使修复可持续和自动化,我为 Rails 应用服务器层的 Deploy 生命周期事件添加了一个自定义配方,称为 custom-cookbook::delete-default-site。配方如下所示:
file '/etc/nginx/sites-enabled/000-default' do
action :delete
end
service 'nginx' do
action :reload
end
【解决方案2】:
检查独角兽及其日志文件的进程列表。如果 unicorn 主进程未启动,部署不会因某种原因失败。