【发布时间】:2012-10-10 22:23:27
【问题描述】:
我是第一次使用 LESS 设置 RoR 应用程序,但在某些资产路径上遇到了问题。
无论出于何种原因,当我在使用 @import 引用的 LESS 文件中使用 asset_path() 或 image_path() 引用图像时,只要我在其中包含嵌入式 Ruby 调用,它似乎就会静默地处理导入的 LESS 文件失败。
以下是应用程序的设置方式:
文件系统:
views
-> home
app
-> assets
-> images
-> general
-> side_shadow.png
-> home
-> chair.png
-> stylesheets
-> less
-> home.css.less.erb
-> template.css.less.erb
-> style.css.less.erb
-> fonts.css.less.erb
public
-> assets
-> general
-> side_shadow.png
-> home
-> chair.png
在我的应用程序中,'home' 是正在呈现的视图。加载时,它使用home.css.less.erb:
@import url("template.css.less.erb");
div#holder
{
background: url(<%= asset_path('home/chair.png')%>);
/* This resolves appropriately as /assets/home/chair.png... */
}
...
然后加载template.css.less.erb:
@import url("style.css.less.erb");
...
最终加载style.css.less.erb:
@import url("fonts.css.less.erb");
body
{
background-image: url(<%= asset_path('general/side_shadow.png') %>);
}
...
当我使用 rake assets:precompile 运行此程序时,它中止,通知我我在 fonts.css.less.erb 文件中定义的 CSS 类未定义,这似乎表明它从未有机会处理我的字体 LESS 文件。
但是,如果我将 <%= asset_path('general/side_shadow.png') %> 替换为文字路径 '/assets/general/side_shadow.png',它会毫无例外地继续,并且页面会按预期加载。
为什么这个 LESS 文件(由另一个 LESS 文件导入)不能包含这个嵌入式 Ruby 调用?我可以在根 home.css.less.erb 文件上执行此操作而不会出现问题,但不能在它引用的任何 LESS 文件中执行此操作。
我的 gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.8'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails' #, '~> 3.2.3'
gem 'coffee-rails' #, '~> 3.2.1'
gem 'less-rails'
gem 'less-rails-bootstrap'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', :platforms => :ruby
gem 'uglifier' #, '>= 1.0.3'
end
gem 'jquery-rails'
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# To use Jbuilder templates for JSON
# gem 'jbuilder'
# Use unicorn as the app server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
# gem 'debugger'
- 戴夫
【问题讨论】:
标签: ruby-on-rails less asset-pipeline