【问题标题】:Rails 4 Assets Bug, not loading imagesRails 4 Assets Bug,不加载图像
【发布时间】:2013-11-21 11:26:22
【问题描述】:

长话短说,因为我在这个愚蠢的框架上浪费了足够多的时间。 我想使用纯 CSS,没有 SCSS,没有 css.erb,没有增加更多开销解析的 mumbo-jumpo,即使多 2 毫秒。

我的 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

现在我在 assets/stylesheets 下有一个名为 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?

【问题讨论】:

  • 试试这个background: image-url("path/to/you/image")
  • 如果您预编译资产并静态提供它们,您将不会在运行时产生任何开销。你可能想看这里:guides.rubyonrails.org/…
  • 不!解析“背景”的值时出错。声明已删除。
  • @RichPeck 这如何解决我的问题?
  • 您需要使用 SCSS 来使用动态路径编译器(例如 asset-pathimage-path)来创建要在运行时运行的图像。我们有这个工作,我可以发布实时代码,但我认为你只会对它投反对票,所以我发了一条消息来帮助你了解问题所在

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您想在样式表和 javascript 文件中使用指纹资产,您需要对这些资产进行预处理,以便使用资产管道辅助方法。与其咆哮和咆哮,不如尝试阅读内容丰富的guides

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

    【讨论】:

    • 我对您的回答投了反对票,因为它没有帮助,并报告了您的评论。下次请尽量保持礼貌,不要使用冒犯性的话,并保留一些自己的东西。
    • 您在整个问题中的态度一直令人不快,所以也请随意反对/标记此评论:)。上帝会帮助任何必须与您合作的人。
    • 我在工作中对周围的人没有任何问题。感谢您的关注,但请不要发表您的意见,尤其是那些没有任何事实依据的意见。
    【解决方案3】:

    您是否尝试过在 CSS 中使用图像帮助器来引用图像的摘要版本?

    类似...

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

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

    【讨论】:

    • “解析“背景图像”的值时出错。声明已删除。”这就是我得到的
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多