我正在运行Rails 5.2.2。我最近从前端分离了一些管理代码,并在此过程中将控制器,视图,css和JS分别移至frontend
或admin
中的文件夹中。
在开发中,一切正常。在生产中,我无法使用以下行css.scss
(位于background: url(arrow.png) no-repeat left center;
中)从app/assets/stylesheets/frontend/application.css.scss
文件中加载图像资产。
我的资产具有以下文件结构:
assets/
config/
images/
admin/
frontend/
products/
another_folder/
javascripts/
admin/
frontend/
stylesheets/
admin/
frontend/
在assets/images/products
中为图像进行更改后,无需在视图中更改任何图像标签,因此我认为也无需在其他任何地方进行更改;似乎一切正常。但是,在生产中,arrow.png
返回404
。当我检查图像请求时,图像的链接为/assets/frontend/arrow.png
。编译资产时,我使用RAILS_ENV=production
标志。我还使用生产标志运行rake assets:clobber
,然后尝试再次编译资产。我已删除所有浏览数据。
这是我请求图像的服务器日志:
I, [2019-08-01T05:06:22.496953 #6733] INFO -- : [8a0b82c0-c4a3-419f-92fd-8f4a89bbe643] Started GET "/assets/frontend/arrow.png" for 35.188.197.210 at 2019-08-01 05:06:22 +0000
F, [2019-08-01T05:06:22.501395 #6733] FATAL -- : [8a0b82c0-c4a3-419f-92fd-8f4a89bbe643]
F, [2019-08-01T05:06:22.503739 #6733] FATAL -- : [8a0b82c0-c4a3-419f-92fd-8f4a89bbe643] ActionController::RoutingError (No route matches [GET] "/assets/frontend/arrow.png"):
更新:
将其添加到视图中可以在生产中很好地工作,因此我可以确认资产确实可以正确编译。
<%= image_tag("frontend/arrow.png") %>
答案 0 :(得分:0)
对于Rails 5,请尝试更改以下配置:
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
到
config.public_file_server.enabled = true
OR
您可以在passenger_env_var中设置RAILS_SERVE_STATIC_FILES true
。那也可以。
答案 1 :(得分:0)
此代码对您有用吗?
background: image-url(arrow.png) no-repeat left center;