在我的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
路由。
因此,我的问题是,如何让应用程序为资源文件夹提供视图文件?或者有任何解决方法吗?我能想到的一个解决方案是将资产文件夹更改为其他内容。
答案 0 :(得分:2)
这是您正在创建的路线的名称冲突。
默认情况下,rails资产存储在public/assets
中。然后Rails尝试使用xsendfile(如果您已正确配置它)从公共目录传递给定资产。
要避免这些冲突,您可以将RESTful路由更改为:assets
以外的名称,也可以使用以下代码自定义资产前缀:
# config/application.rb
config.assets.prefix = '/some_other_path'
编辑:我强烈建议重命名RESTful路由,因为一些写得不好的宝石不使用assets.prefix而是使用硬编码的/assets
路径。如果可能的话,嵌套路线也可以。 (感谢Gabor Garami)