2011-10-05 46 views
12

Tôi đang làm việc trên ứng dụng Rails 3.1. Tôi đã tạo một tệp application.css.scss.erb. Các .erb là cuối cùng bởi vì tôi muốn tải một biến từ tập tin cấu hình như biến màu trong css:CSS bộ nhớ cache đường ống tài sản?

$highlight1: #<%= COLOR.highlight1 %>; 
$highlight2: #<%= COLOR.highlight2 %>; 

Mọi thứ hoạt động tốt, nhưng vấn đề tôi gặp phải là bất cứ khi nào tôi thay đổi giá trị bên trong COLOR.highlight1, nó không phản ánh sự thay đổi cho đến khi tôi đi vào tập tin css của tôi và thay đổi một cái gì đó (tôi thường thêm một số không gian và lưu nó). Thats khi tôi thấy sự thay đổi. Đường ray rõ ràng đang tìm xem liệu tệp đã được thay đổi để cập nhật thay đổi hay chưa.

Có cách nào ít nhất trong quá trình phát triển không, điều này có thể được tắt và tôi có thể thấy các thay đổi mà không phải sửa đổi tệp css?

Bất kỳ phê bình/ý kiến ​​về kỹ thuật của tôi cũng được chào đón

+0

Vì tò mò, tại sao bạn cần lưu trữ số này liên tục? – nfm

+0

Thực ra, tôi cần bao gồm Twitter Bootstrap cần LESS. Vì vậy, dài câu chuyện ngắn, tôi muốn một nơi duy nhất mà tôi sẽ tuyên bố màu sắc và sau đó sử dụng màu sắc trong tuyên bố giá trị trong SASS (đó là những gì ứng dụng của tôi sử dụng trong suốt) và một chút LESS (đó là những gì Twitter Bootstrap hoạt động trên) . Có ý nghĩa? – alik

+0

Bạn hãy thử sử dụng bảo vệ để xem tập tin ruby ​​của bạn và cập nhật thông tin trên sass - http://railscasts.com/episodes/264-guard – house9

Trả lời

0

có thể thử:

config.assets.digest = true 

trong tập tin cấu hình phát triển của bạn

+0

hmm, không hoạt động – alik

7

sprockets depend_on chỉ được sử dụng để khai báo các loại phụ thuộc. Vì vậy, ở phía trên cùng của tập tin css.scss.erb của bạn, với các chỉ thị khác (yêu cầu và bạn bè), đặt một cái gì đó như:

//= depend_on "/path/to/colors.rb" 

Sau đó, khi các tập tin /path/to/colors.rb thay đổi, nó sẽ buộc các css để cập nhật quá.

Thật không may, tôi chưa bao giờ làm việc này với đường dẫn tương đối đến tệp bên ngoài của một trong các thư mục nội dung (javascripts/stylesheets/images). , hoặc người nào khác tôi đang thiếu cái gì đó. Điều đó khiến bạn có các tùy chọn chỉ định đường dẫn tuyệt đối, hầu như chắc chắn sẽ không hoạt động trên tất cả các môi trường ứng dụng của bạn hoặc đặt các hằng số vào các thư mục tài sản của bạn (ví dụ: app/assets/stylesheets/colors.rb).

Để tham khảo, đây là doc cho depend_on chỉ thị từ Bánh răng (2.0.3) nguồn, trong sprockets/directive_processor.rb

# Allows you to state a dependency on a file without 
    # including it. 
    # 
    # This is used for caching purposes. Any changes made to 
    # the dependency file will invalidate the cache of the 
    # source file. 
    # 
    # This is useful if you are using ERB and File.read to pull 
    # in contents from another file. 
    # 
    #  //= depend_on "foo.png" 
    # 

Nếu ai không biết một cách để xác định đường dẫn tương đối so với những nơi khác như config/initializers hoặc một cái gì đó, xin vui lòng cho tôi biết!

+1

Xem [câu trả lời bên dưới] (http://stackoverflow.com/a/10596268/235855) nếu bạn muốn sử dụng đường dẫn tương đối. –

0

http://guides.rubyonrails.org/configuring.html

  • config.assets.compile là một boolean có thể được sử dụng để bật biên soạn Bánh răng sống trong sản xuất.

có thể muốn thử điều đó, tôi không chắc liệu thời gian thực của nó có được biên dịch hay không, ít nhất nó cũng nên tắt bộ nhớ đệm.

3

Ngoài câu trả lời của David Faber. Tôi cũng cần sử dụng các đường dẫn tương đối.

tôi muốn tạo ra một file js với từ điển địa phương, trong đó sẽ cập nhật nếu các tập tin địa phương đã được thay đổi:

//= depend_on "../../../config/locales/en.yml" 
//= depend_on "../../../config/locales/ja.yml" 

var locales = <%= locales.to_json %>; 

Hóa ra rằng hiện nay (Rails 3.2.3) đường dẫn tương đối chỉ hoạt động nếu tương đối đường dẫn cũng nằm trong đường dẫn tài sản!

Vì vậy, các giải pháp xấu xí là để thêm đường dẫn trong config/application.rb:

config.assets.paths.unshift Rails.root.join("config", "locales").to_s 
0

tôi cố gắng này, nó hoạt động

trong application.rb

config.autoload_paths += %W(#{config.root}/lib/assets_variables) 
config.assets.paths << File.join(Rails.root, 'lib', 'assets_variables') 

trong lib/assets_variables/màu .rb

module Color 
    def self.default 
    'blue' 
    end 
end 

trong ứng dụng/asset/stylesheets/color.css.scss.erb

//= depend_on "color.rb" 
$default_color: <%= Color::default %>; 
.content { 
    color: $default_color; 
} 
Các vấn đề liên quan