我第一次使用LESS設置了RoR應用程序,並且遇到了一些資產路徑問題。Ruby on Rails:嵌入式Ruby無法在導入的LESS文件中工作?
無論出於何種原因,當我在使用@import
引用的LESS文件中引用使用asset_path()
image_path()
或圖像,這似乎默默地失效處理導入的LESS文件每當我包括在它的一個嵌入的Ruby呼叫。
這裏的應用程序是如何設置:
文件系統:
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.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類未定義,這似乎表明它從來沒有機會處理我的fo nts 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'
- 戴夫