Rails 4资产错误,没有加载图像

时间:2013-11-21 11:26:23

标签: css ruby-on-rails ruby ruby-on-rails-4

简而言之,因为我浪费了足够的时间来使用这个愚蠢的框架。 我想使用纯CSS,没有SCSS,没有css.erb,没有mumbo-jumpo可以增加更多的开销解析,即使它超过2ms。

我的production.rb文件(我正在使用webrick):

Properties::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both thread web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Enable Rack::Cache to put a simple HTTP cache in front of your application
  # Add `rack-cache` to your Gemfile before enabling this.
  # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
  # config.action_dispatch.rack_cache = true

  # Disable Rails's static asset server (Apache or nginx will already do this).
  config.serve_static_assets = true

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Generate digests for assets URLs.
  config.assets.digest = true

  # Version of your assets, change this if you want to expire all your assets.
  config.assets.version = '1.0'

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # Set to :debug to see everything in the log.
  config.log_level = :info

  # Prepend all log lines with the following tags.
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups.
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = "http://assets.example.com"

  # Precompile additional assets.
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
  # config.assets.precompile += %w( search.js )

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  # config.action_mailer.raise_delivery_errors = false

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Disable automatic flushing of the log to improve performance.
  # config.autoflush_log = false

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new
end

现在我在资产/样式表下有一个名为general.css的简单css文件,它包含这个简单的行:

html{
    background-image:url('homepage_bg_1.jpg');
}

现在我试过了:

background-image:url('assets/homepage_bg_1.jpg');
background-image:url('public/assets/homepage_bg_1.jpg');
background-image:url('public/homepage_bg_1.jpg');
background-image:url('assets/images/homepage_bg_1.jpg');

什么都行不通!!浏览器仍然会查找“homepage_bg_1.jpg”图像,这是正常的,但在我的公共资源文件夹中,我有'homepage_bg_1-de4a0800c51d578f152fe5ca821136a6.jpg'。

我正在使用RAILS_ENV=production bundle exec rake assets:precompile来预编译我的资产。

现在我假设Rails不够愚蠢,并且会寻找那个文件。但它没有。有人可以告诉我这个框架有什么问题吗?我应该在Github中打开一个问题吗?框架是否试图让我们不使用CSS?

3 个答案:

答案 0 :(得分:5)

如果您不希望Rails触及任何资产,您可以将它们放在公共目录中。

这样你就不会有任何指纹识别或不需要的预处理。它们将“按原样”提供。您不必弄乱Rails设置或进行任何预编译。

如果您有一天选择再次使用资产管道,则可以使用这两种方法。

答案 1 :(得分:3)

如果要在样式表和javascript文件中使用指纹资产,则需要对这些资产进行预处理,以便使用资产管道帮助程序方法。而不是咆哮和狂妄尝试阅读那些信息量很大的guides

您已正确地确定您的资产是使用指纹编制的,这是资产到期并且是管道的组成部分。为了将正确的文件名插入到其他资源中,您需要使用提供的帮助程序。对于ERB使用asset_path,使用Sass,您有image-url / image-path / asset-url / asset-path / etc,具体取决于您的要求。

答案 2 :(得分:0)

您是否尝试过使用CSS中的图片帮助程序来引用图片的摘要版本?

像...一样的东西。

html {
  background-image: image-url('homepage_bg_1.jpg');
}

这将自动为您添加名称附加摘要字符串的图像引用。