Why does stylesheet_link_tag not link to /assets in production?

大憨熊 提交于 2019-11-30 06:52:52
Richard Hulse

When the helper generates this code:

/stylesheets/application.css

This is because the pipeline is NOT enabled in whatever mode you are in. There are several possible reasons.

  • You have the pipeline enabled in the wrong config file. (The pipeline should be enabled in the application.rb config file)

  • You have it enabled in application.rb and disabled somewhere else.

  • You have accidentally commented out a railtie somewhere

See this question for details.

If this is an upgraded app, check all the config options in the last section of the pipeline guide to make sure that you have them all correctly set.

I know this is for rails 3.1 but a very similar error can happen to users of rails 4 so for the sake of completeness and to help future googlers. Most probable cause is you didn't added that asset to a precompile directive in production.rb, it looks like this:

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
config.assets.precompile += %w(  )

As the OP said, application.css wasn't being added and the symptom is the url begins with /stylesheets or /javascripts and not assets. So the solution is to

config.assets.precompile += %w( your_assets.css your_assets.js )
naren

WARNING: Setting config.assets.compile = true in production can make your app vulnerable to Rails Asset Pipeline Directory Traversal Vulnerability (CVE-2018-3760) .

I would suggest you to enable config.assets.compile = false(by default) to true in production.rd and see the assets are served as in developemnt. If they are correctly served then you should check your application.css to see if you are including other stylesheets in the directory properly like having css files

/*
*= require scaffold
*= require pagination
*= require_self
*= require_tree.
*/

where scaffold and pagination are css files. or mention them under config.assets.precompile flag as below.

config.assets.precompile += %w(pagination.css scaffold.css )

I assume the reason being precompile works (application.js, application.css, and all non-JS/CSS are already added) and any additonal assets should be added to config.assets.precompile flag.

I thought that the assets were supposed to be in app/assets not public/assets however I may be mistaken.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!