Ruby on rails 图像不';在开发模式下使用Rails资产管道无法正确解析

Ruby on rails 图像不';在开发模式下使用Rails资产管道无法正确解析,ruby-on-rails,ruby-on-rails-3.2,asset-pipeline,Ruby On Rails,Ruby On Rails 3.2,Asset Pipeline,TL;DRasset\u data\u uri起作用,但asset\u path不起作用 我最近从一个自制的+jammit资产管道切换到Rails资产管道,希望我能抛开一堆代码,把大部分事情都安排好。我在生产中一切都很好(不像stackoverflow上的大多数人),但是在开发模式下图像不会显示 我注意到了一些事情。 为了让图像正确显示,我必须在开发模式下进行预编译,以便通过css正确引用它们。不幸的是,在开发模式下预编译也会预编译javascript 在开发模式下未预编译时,使用asset\

TL;DR
asset\u data\u uri
起作用,但
asset\u path
不起作用

我最近从一个自制的+jammit资产管道切换到Rails资产管道,希望我能抛开一堆代码,把大部分事情都安排好。我在生产中一切都很好(不像stackoverflow上的大多数人),但是在开发模式下图像不会显示

我注意到了一些事情。

  • 为了让图像正确显示,我必须在开发模式下进行预编译,以便通过css正确引用它们。不幸的是,在开发模式下预编译也会预编译javascript
  • 在开发模式下未预编译时,使用
    asset\u data\u uri()
    请求的app/assets/images中的图像显示良好。但是,使用
    asset\u path()
    的相同图像不可用。例如,在我的initialize.css.erb文件中,
    显示良好,但
    不显示。这是因为Rails将路径解析为/assets/cork.bg.gif,并且该位置没有图像(即public/assets/cork.bg.gif)
  • 使用rake资产进行预编译:precompile RAILS_ENV=development使我的图像处于正确的位置,这样它们就可以从public/assets获得服务,但这也会阻碍开发,因为现在对JS文件的更改会被缓存,直到我再次预编译
那我该怎么办?下面是相关的配置。如果我还能提供什么,请告诉我:

在应用程序中。rb:

config.assets.enabled = true
config.assets.version = '1.0'
config.assets.compile = true
config.assets.compress = false
config.assets.debug = true
正在开发中。rb:

config.assets.enabled = true
config.assets.version = '1.0'
config.assets.compile = true
config.assets.compress = false
config.assets.debug = true
注意:我已经读了很多关于涉及
config.service\u static\u资产的文章。它目前在development.rb中被注释掉了,所以它是Rails 3.2.13的默认版本

示例:initialize.css.erb

我的图像位于app/assets/images中。我使用的示例图像位于app/assets/images/cork.bg.gif

作品:

body {
  background-image: url(<%= asset_data_uri "cork.bg.gif" %>);
}
正文{
背景图片:url();
}
不起作用:

body {
  background-image: url(<%= asset_path "cork.bg.gif" %>);
}
正文{
背景图片:url();
}

您的图像在哪里?您的评论并不完全正确:“这是因为Rails解析到/assets/cork.bg.gif的路径,而该位置没有图像(即public/assets/cork.bg.gif)”。当管道在开发中启用时,它会在“/assets”上挂载一条由Rails提供服务的路由。这意味着它不在公共目录中查找。您能否验证
app/assets/images
是否在您的资产搜索路径中?在Rails控制台中键入
Rails.application.config.assets.paths
,查看Rails正在搜索的位置。