Why does stylesheet_link_tag not link to /assets in production?

前端 未结 4 1961
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-30 06:40

I just did the first deploy for a new Rails 3.1 application, but the assets don\'t seem to work correctly. I\'m precompiling everything upon deploy, and it turns up in

相关标签:
4条回答
  • 2020-12-30 07:02

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

    0 讨论(0)
  • 2020-12-30 07:06

    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 )
    
    0 讨论(0)
  • 2020-12-30 07:11

    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.

    0 讨论(0)
  • 2020-12-30 07:11

    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.

    0 讨论(0)
提交回复
热议问题