Rails 4:资产没有在生产中加载
我正在尝试将我的应用投入生产,并且图像和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