2012-02-19 29 views
5

EDIT

Câu hỏi này phải là: Tại sao rails_admin gây ra rake asset:precompile không thành công?Rails 3.1: Tại sao rails_admin lại gây ra `rake asset: precompile` thành thất bại?

Tôi đang nâng cấp từ Rails 3.0 lên 3.1 và bật đường ống nội dung. Một nơi nào đó trên đường đi, rails_admin đã phá vỡ phần biên dịch tài sản của tôi:

-----> Preparing app for Rails asset pipeline 
     Running: rake assets:precompile 
     rake aborted! 
     Undefined variable: "$red". 
     (in /tmp/build_zkm1tzzdhdh6/vendor/bundle/ruby/1.9.1/bundler/gems/rails_admin-a887eee6e916/app/assets/stylesheets/rails_admin/base/theming.css.scss) 

     Tasks: TOP => assets:precompile:primary 
     (See full trace by running task with --trace) 
     Precompiling assets failed, enabling runtime asset compilation 
     Injecting rails31_enable_runtime_asset_compilation 
     Please see this article for troubleshooting help: 
     http://devcenter.heroku.com/articles/rails31_heroku_cedar#troubleshooting 

Điều gì đang xảy ra ở đây? $red được định nghĩa (trong một tệp rails_admin .css khác). Vậy tại sao không phải là theming.css.scss có thể truy cập vào nó? Làm cách nào để tránh điều này?

Trả lời

9

tôi cố định này trong file config/môi trường/production.rb: tôi thay thế dòng

config.assets.precompile = ['*.js', '*.css'] 

khác

config.assets.precompile += %w(rails_admin/rails_admin.css rails_admin/rails_admin.js) 

Giải pháp này đang làm việc cho ruby ​​1.9.3 và đường ray 3.1

+0

Tương tự ở đây. Mặc dù không được đăng, đây là giải pháp mà tôi đã thực hiện. – thewillcole

+0

Stil gặp lỗi –

+0

@AnnaBillstrom Bạn sử dụng phiên bản nào? –

2

Dường như khiếu nại không có trong base.css - theo dõi ngăn xếp cho biết sự cố nằm trong /app/assets/stylesheets/rails_admin/base/theming.css.scss. Đó là nơi mà biến $ red được gọi.

Nội dung biên dịch xem tất cả các trang CSS của bạn riêng lẻ, trong một bong bóng - sau đó ghép chúng lại với nhau thành một đoạn lớn. Đó là lý do tại sao nó không thành công - biến số $red không hiển thị trong trang tính riêng lẻ, mặc dù nó sẽ hiển thị trong phiên bản được biên dịch.

Bạn có thể sửa lỗi này theo một trong hai cách: thay thế $red trong theming.css.scs bằng mã màu thực hoặc bạn có thể di chuyển biến của mình vào tệp và nhập tệp đó. Trong ứng dụng của tôi, ví dụ, tôi đã đặt tất cả các biến màu của tôi vào "color_codes.css.scss". Sau đó, trong bất kỳ bảng định kiểu nào mà tôi cần tham khảo chúng, tôi thêm dòng @import "color_codes"; vào đầu trang tính.

+0

Cảm ơn, Mark! Rất ít điều: 1) Không có tệp "/app/assets/stylesheets/rails_admin/base/theming.css.scss", vì vậy tôi giả định rằng được tạo trực tiếp từ "base.css" et al; 2) Nếu giả định là đúng, thì tại sao "base.css" thậm chí còn tham chiếu "$ red"? – thewillcole

+0

Ngoài ra, tôi thích phong cách "color_codes" của bạn cho đường ray nói chung, nhưng tôi không muốn phải chỉnh sửa/duy trì mã bên trong "rails_admin", được tạo khi tôi cài đặt đá quý "rails_admin". Vì vậy, tôi sẽ không sử dụng giải pháp đó chỉ được nêu ra. – thewillcole

+1

Rất tiếc, không thấy mặt trước của đường dẫn tệp đó - Tôi đã không nhận ra đây là mã đi kèm với một viên ngọc. Nó không được biên dịch trực tiếp từ base.css; nó thực sự được tham chiếu bởi chính gem đó trong một thư mục hoàn toàn bên ngoài ứng dụng Rails của bạn. Dường như đá quý RailsAdmin có một số trục trặc khi nói đến biên dịch trước các tài sản nói chung. Có một chuỗi thảo luận dài ở đây có thể trợ giúp: https://github.com/sferik/rails_admin/issues/682. –

3

Whoa! Tôi đã tìm thấy sự cố - đó là known issue trên Heroku.

Bạn không thể bao gồm các tệp rails_admin .css hoặc .js. ví dụ:.

  • chắc chắn rằng bạn không có bất kỳ nhận tất cả * (css | js) trong config.assets.precompile
  • chắc chắn rằng bạn không có bất kỳ nhận tất cả require_tree . trong application.(css|js)

Vấn đề của tôi là tôi đang làm việc trước đây. Điều đó khiến các tệp css của tôi được tải một cách độc lập, sao cho các biến, như là $red, không được chia sẻ chính xác giữa chúng.

Các vấn đề liên quan