首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails 4:生产环境中未加载的资产

Rails 4:生产环境中未加载的资产
EN

Stack Overflow用户
提问于 2013-09-09 22:09:54
回答 18查看 118.6K关注 0票数 121

我正在尝试将我的应用程序投入生产,但图像和css资源路径不起作用。

这是我目前正在做的事情:

图像图像资产位于/app/ assets //Image.jpg

  • 样式表位于我的布局中,我是这样引用css文件的:<%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %>
  • Before重新启动unicorn,我运行RAILS_ENV=production bundle exec rake assets:precompile,它成功了,并且我在public/assets目录中看到了指纹文件。

当我浏览我的站点时,我得到了mysite.com/stylesheets/styles.css的404not found错误。

我做错了什么?

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

代码语言:javascript
复制
<%= 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 %>

生成的源代码如下:

代码语言:javascript
复制
<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路径)是非常令人困惑的。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2013-09-09 23:40:30

/config/environments/production.rb中,我必须添加以下内容:

代码语言:javascript
复制
Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )

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

令人有点沮丧的是,文档明确指出默认情况下启用了资产管道,但没有澄清仅适用于javascripts的事实。

票数 33
EN

Stack Overflow用户

发布于 2014-02-10 15:32:56

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

代码语言:javascript
复制
config.assets.compile = true
config.assets.precompile =  ['*.js', '*.css', '*.css.erb'] 

这对我很有效。使用以下命令预编译资源

代码语言:javascript
复制
RAILS_ENV=production bundle exec rake assets:precompile

祝你好运!

票数 107
EN

Stack Overflow用户

发布于 2014-12-05 22:59:12

我刚刚遇到了同样的问题,并在config/environment/production.rb中找到了以下设置:

代码语言:javascript
复制
# Rails 4:
config.serve_static_assets = false

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

将其更改为true使其正常工作。似乎在默认情况下,Rails希望您配置前端them服务器来处理公共文件夹之外的文件请求,而不是将它们代理到Rails应用程序。也许你已经为你的javascript文件做了这件事,而不是你的CSS样式表?

(See Rails 5 documentation)。正如注释中所指出的,由于默认设置为config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?,因此使用Rails5只需设置RAILS_SERVE_STATIC_FILES环境变量即可。

票数 87
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18700219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档