Rails 4:资产没有在生产中加载

我正在尝试将我的应用投入生产,并且图像和CSS资产路径不起作用。

以下是我目前正在做的事情:

  • 图片资产位于/app/assets/images/image.jpg中
  • 样式表位于/app/assets/stylesheets/style.css中
  • 在我的布局中,我参考了这样的CSS文件: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • 在重新启动独角兽之前,我运行RAILS_ENV=production bundle exec rake assets:precompile并成功,我在public/assets目录中看到指纹文件。
  • 当我浏览我的网站时, mysite.com/stylesheets/styles.css出现404未找到的错误。

    我究竟做错了什么?

    更新:在我的布局中,它看起来像这样:

    <%= stylesheet_link_tag    "bootstrap.min", media: "all", "data-turbolinks-track" => true %>
    <%= stylesheet_link_tag    "styles", media: "all", "data-turbolinks-track" => true %>
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
    

    生成源是这样的:

    <link data-turbolinks-track="true" href="/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />
    <link data-turbolinks-track="true" href="/stylesheets/styles.css" media="all" rel="stylesheet" />
    <script data-turbolinks-track="true" src="/assets/application-0c647c942c6eff10ad92f1f2b0c64efe.js"></script>
    

    看起来像Rails没有正确查找编译的css文件。 但是为什么它对JavaScripts正常工作(注意/assets/****.js路径)非常混乱。


    在rails 4中,您需要进行以下更改:

    config.assets.compile = true
    config.assets.precompile =  ['*.js', '*.css', '*.css.erb'] 
    

    这与我合作。 使用以下命令预先编译资产

    RAILS_ENV=production bundle exec rake assets:precompile
    

    祝你好运!


    我只是遇到了同样的问题,并在config / environments / production.rb中找到了这个设置:

    # Rails 4:
    config.serve_static_assets = false
    
    # Or for Rails 5:
    config.public_file_server.enabled = false
    

    改变它为true工作。 默认情况下,Rails希望你已经配置了你的前端web服务器来处理公用文件夹中的文件请求,而不是将它们代理到Rails应用程序。 也许你已经完成了你的JavaScript文件,但不是你的CSS样式表?

    (请参阅Rails 5文档)。 正如评论中指出的那样,在Rails 5中,您可以设置RAILS_SERVE_STATIC_FILES环境变量,因为默认设置是config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?


    /config/environments/production.rb我不得不添加这个:

    Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )
    

    .js已经进行了预编译,但我仍然添加了它。 .css和.css.erb显然不会自动发生。 ^[^_]排除部分被编译 - 这是一个正则表达式。

    有点令人沮丧的是,文档明确指出资产管道是默认启用的,但没有阐明仅适用于JavaScript的事实。

    链接地址: http://www.djcxy.com/p/79015.html

    上一篇: Rails 4: assets not loading in production

    下一篇: Rails Asset Pipeline with Sub