图像不会在Rails开发环境中加载

时间:2015-07-28 15:34:39

标签: ruby-on-rails ruby-on-rails-3 erb

我有以下代码行:

<img src="<%= image_url ("/slides/hotel.jpg") %>" style="opacity:0;" alt="slidebg1" data-bgfit="cover" data-bgposition="left bottom" data-bgrepeat="no-repeat">

的Gemfile:

source https://rubygems.org
gem 'rails', '4.2.3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'pg', '~> 0.18.2'
gem 'coffee-script-source', '1.8.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'simple_form'
gem 'headjs-rails'

group :development, :test do
  gem 'debugger'
  gem 'activerecord-postgresql-adapter'  gem 'web-console', '~> 2.0'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Development.rb:

config.assets.debug = false
config.assets.compile = true
config.assets.enabled = true
config.serve_static_assets  = true

我在Windows 8中运行,我给了rake资产:预编译,它完成得很好。但图像无法加载。我确信该图像存在于该指定目录下。就我而言,图像存在于assets/images/slides/hotel.jpg下。我曾尝试将文件路径设为/assets/images/slides/hotel.jpg/images/slides/hotel.jpg/slides/hotel.jpg,并且所有3都不起作用。

错误:

Started GET "/slides/hotel.jpg" for ::1 at 2015-07-28 21:03:04 +0530
ActionController::RoutingError (No route matches [GET] "/slides/hotel.jpg")

4 个答案:

答案 0 :(得分:2)

在您的情况下,图片位于assets/images/slides/hotel.jpg下,因此image_url返回的路径必须为/images/slides/hotel.jpg(有关guide中资源路径的详细信息)

解决方案:

<img src="<%= image_url('slides/hotel.jpg') %>" style="opacity:0;" alt="slidebg1" data-bgfit="cover" data-bgposition="left bottom" data-bgrepeat="no-repeat">
#                        ^---- Just remove the "/" here

我是如何找到的:

小小的奖励,帮助你找到,下次你遇到类似的情况

在您的rails应用目录中,在终端中,启动rails c

# Include the helper whom define image_url
irb(main):001:0> include ActionView::Helpers::AssetUrlHelper
=> Object

# Test the output of your actual code
irb(main):002:0> image_url "/slides/hotel.jpg"
=> "/slides/hotel.jpg"
# As you can see the path is incorrect because it does not start with '/images'

# Test the output after removing the heading slash
irb(main):003:0> image_url "slides/hotel.jpg"
=> "/images/slides/hotel.jpg"
# Correct output as the path starts with '/images'

答案 1 :(得分:1)

Why dont you use image_path

For example

<%= image_path "/slides/hotel.jpg", style:"opacity:0;", alt:"slidebg1", 'data-bgfit'=>"cover", 'data-bgposition'=>"left bottom" 'data-bgrepeat'=>"no-repeat"%>

答案 2 :(得分:1)

我会尝试其他两种变体:

(1)image_url ("slides/hotel.jpg")(我无法想象这是基本的,image_url正在添加额外的斜杠...)

(2)asset_url ("hotel.jpg")

答案 3 :(得分:1)

试试这个

在application.rb中,添加以下行:

config.assets.enabled = true

如果幻灯片目录位于资产目录中,则

config.assets.paths << Rails.root.join("app", "assets", "slides")

如果slide目录在assets / images目录中,那么

config.assets.paths << Rails.root.join("app", "assets", "images", "slides")

然后尝试加载图片

<%= assets_path "/slides/hotel.jpg", style:"opacity:0;", alt:"slidebg1", 'data-bgfit'=>"cover", 'data-bgposition'=>"left bottom" 'data-bgrepeat'=>"no-repeat"%>

希望这对你有用。

相关问题