我通过AWS EBS部署了一个非常标准的Rails 5应用程序。
我的/robots.txt
无法访问,对其URL的请求返回404错误。
我将其与/public
,404.html
和422.html
页面一起放在500.html
文件夹中,这些页面由nginx正确提供。
有关可能出什么问题的任何线索?我应该检查什么?
EB CLI 3.14.6 (Python 2.7.1)
Ruby 2.4.3 / Rails 5.1.4 / Puma (gem) 3.7
答案 0 :(得分:1)
4年前,在官方的AWS论坛上提出了一个非常类似的问题:https://forums.aws.amazon.com/thread.jspa?threadID=150904
仅4年后,来自AWS的一个勇敢的家伙介入了!在引用的回复下方:
你好!我是Chris,Elastic的新Ruby平台人员 豆茎。今天访问此线程,看起来好像有一个 Beanstalk的Ruby + Puma带来很多痛苦(也很混乱!) 处理静态文件。
快速摘要:创建此线程(在2014年)时,Beanstalk是 本质上使用Amazon Linux随附的默认Nginx, 仅进行一些日志记录修改以支持运行状况监视。那 产生此线程,因为通常期望使用静态文件 存在时为Web服务器提供服务。
因此,这里的人们去了并修复了/ assets文件夹。大! 不幸的是,修复请求存在误解 服务/ public文件夹-而是使用Beanstalk的Puma平台 “ / public”中的“ / public”中的内容,而不是“ /”中的内容。这绝对是 一个问题,所以这里有一些解决方法:
解决方法1:启用服务静态资产。是的,这浪费了一些 应用程序线程在这里或那里,但是如果您的用例仅仅是 robots.txt和favicon.ico,您仅抢了几个appserver 线程。除非运行应用程序服务器,否则我会选择此服务器 热。
解决方法2:编写一个.ebextension来修改Nginx配置 在/服务于/ public。我正在写一个,所以我要解决 当我给予它应有的想法时,将其作为对此的答复。一些 当前代码中的一部分可能会为您的应用提供代码,因此请仔细检查 配置,如果您已经完成此解决方法。
我已经为团队创建了一个跟踪问题,其详细程度如下: 因此我们将努力纠正此问题。谢谢大家的反馈- 我们希望为您和您的应用提供更好的服务。
从那时起,没有进一步的回复;如果有人知道使用.ebextensions编辑nginx配置的“ aws批准方式”,请在此处发布! :)
答案 1 :(得分:1)
上面指向 AWS 论坛的链接现在错误为 400,因此我是如何解决此问题的。在 AWS2 平台上运行的 Ruby 2.7:
5fc95ebeb0d8daafdabd105a
子目录中的静态文件:
在 "
文件夹下创建一个名为 call.respondFile(File("/home/books/en/ru/1984.sb2"))
的文件。内容应类似于:
lsof -p 283 | grep 283.*home/
这将确保所有对 /public
和 .ebextensions
的请求都来自相应的 static-files.conf
子目录。
位于 option_settings:
aws:elasticbeanstalk:environment:proxy:staticfiles:
/w3c: public/w3c
/images: public/images
目录顶层的静态文件:
对于 domain.com/images
或 domain.com/w3c
等顶级文件,向 /public
添加适当的条目以直接提供静态内容:
/public
确保 robots.txt
的静态文件配置设置正确:
sitemap.xml
最后一部分是最重要的。
答案 2 :(得分:0)
在具有PUMA的AWS EB中,公共文件夹下的静态文件位于/ public / URL下。 Webcrawlers希望该文件位于/robots.txt
我一直在努力尝试实现对这些文件的路由,并选择了一种更“ Rails”的实现方式。
1)config / routes.rb
get "/robots.txt", to: "robots#show"
2)app / controllers / robots_controller.rb
class RobotsController < ApplicationController
def show
render "show", layout: false, content_type: "text/plain"
end
end
3)app / views / robots_txts / show.erb
User-agent: *
Disallow: /