Rails资产控制器为公共资产而不是资产的索引页提供服务

时间:2018-06-05 11:00:32

标签: ruby-on-rails ruby ruby-on-rails-5

在我的Rails应用程序中,我有一个资产控制器(因为模型名称的要求是资产)。

我用 resources :assets 将我的控制器路由到此URL以显示/资产。

在开发模式下一切正常。但是,在AWS Beanstalk上部署应用程序后,它会显示来自Nginx的错误404。

/var/log/nginx/error.log中浏览Nginx错误日志文件后,我发现了这一点。

open() "/var/app/current/public/assets" failed (2: No such file or directory), client: 172.31.21.101, server: _, request: "GET /assets?status=active HTTP/1.1"

我从日志中了解到,这意味着应用程序会尝试查找资产/var/app/current/public/assets而不是GET /assets路由。

因此,我的问题是,如何让应用程序为资源文件夹提供视图文件?或者有任何解决方法吗?我能想到的一个解决方案是将资产文件夹更改为其他内容。

1 个答案:

答案 0 :(得分:2)

这是您正在创建的路线的名称冲突。

默认情况下,rails资产存储在public/assets中。然后Rails尝试使用xsendfile(如果您已正确配置它)从公共目录传递给定资产。

要避免这些冲突,您可以将RESTful路由更改为:assets以外的名称,也可以使用以下代码自定义资产前缀:

# config/application.rb
config.assets.prefix = '/some_other_path'

编辑:我强烈建议重命名RESTful路由,因为一些写得不好的宝石不使用assets.prefix而是使用硬编码的/assets路径。如果可能的话,嵌套路线也可以。 (感谢Gabor Garami)