AWS EBS-Rails5 / nginx-robots.txt找不到错误(404)

时间:2018-10-26 04:20:10

标签: ruby-on-rails-5 robots.txt amazon-elastic-beanstalk

我通过AWS EBS部署了一个非常标准的Rails 5应用程序。 我的/robots.txt无法访问,对其URL的请求返回404错误。

我将其与/public404.html422.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

3 个答案:

答案 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/imagesdomain.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: /