AWS OpsWorks:成功的 Ruby on Rails 默认层部署在浏览器中显示 404 错误
Posted
技术标签:
【中文标题】AWS OpsWorks:成功的 Ruby on Rails 默认层部署在浏览器中显示 404 错误【英文标题】:AWS OpsWorks: Successful Ruby on Rails default layer deployment shows 404 error in browser 【发布时间】: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
!
任何帮助都将不胜感激。
【问题讨论】:
【参考方案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 主进程未启动,部署不会因某种原因失败。
【讨论】:
以上是关于AWS OpsWorks:成功的 Ruby on Rails 默认层部署在浏览器中显示 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
特定的 nodejs 版本,opsworks_ruby,aws,chef 12
在 Amazon OpsWorks 上使用 Ruby 2.0
AWS OpsWorks - 无法使用 AWS OpsWorks 部署我的应用程序,尤其是无法成功迁移