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 部署我的应用程序,尤其是无法成功迁移

如何在我的 Ruby on Rails 应用程序上使用 ruby​​ 2.7

使用 AWS OpsWorks 设计 gem 初始化

AWS opsworks 上的 chef 12 脚本无法安装 jenkins