2012-03-12 30 views
35

Để gỡ lỗi javascript trong môi trường sản xuất heroku của tôi, tôi cần phải tắt nén nội dung (hoặc ít nhất là nén javascript). Tôi đã thử config.assets.compress = false cùng với config.assets.debug = true và tài sản đã nén vẫn được sử dụng. Sau đó tôi đã xóa tài sản đã nén, tại thời điểm đó, không có nội dung nào được hiển thị. Tôi đã thêm config.assets.enabled = false, điều này không giúp ích gì. Tôi đã thử sao chép các tài sản chưa nén vào các thư mục khác nhau, bao gồm gốc ứng dụng, công khai và tài sản/công cộng (sau này sử dụng cả hai thư mục "hình ảnh", "javascripts" và "stylesheets" và đặt trực tiếp nội dung vào thư mục Tôi đã cuối cùng có thể nhận được các javascripts để làm việc bằng cách thay đổi html để tham khảo trực tiếp tất cả các tập tin javascript.Nhưng CSS và hình ảnh vẫn không hoạt động. nên đã làm việc.Bất cứ ý tưởng những gì tôi đã làm sai?Vô hiệu hóa giảm thiểu tài sản trong sản xuất đường ray

+0

Bạn đã chắc chắn thay đổi 'config/môi trường/production.rb'? –

+0

Bạn có đang sử dụng trình trợ giúp thẻ Rails để truy cập nội dung (javascript_include_tag 'script.js') không? Bạn có thể tập trung vào một tệp và cung cấp cho chúng tôi ví dụ về cách nó được triển khai và những gì đang xảy ra? – mltsy

Trả lời

47

tôi đã đưa ra cách giải quyết này sau khi đọc the docs:

tạo ra một mô-đun mà không làm gì để nén js/css ở đây: lib/modules/no_compression.rb

class NoCompression 
    def compress(string) 
    # do nothing 
    string 
    end 
end 

cấu hình tài sản của bạn để (không) được nén với bạn máy nén do-nothing

config.assets.compress = true 
config.assets.js_compressor = NoCompression.new 
config.assets.css_compressor = NoCompression.new 
+0

Rất thông minh! Tôi chưa bao giờ nghĩ về điều đó. Cảm ơn! –

+0

Điều tuyệt vời để sử dụng khi triển khai để dàn dựng máy chủ. Tiết kiệm cho tôi 100 giây từ tổng số 260 mỗi lần tôi triển khai trên heroku. – hakunin

+0

Điều này vẫn sẽ thêm băm vào tên tệp nội dung?Tôi đang phải gỡ lỗi một số mã trên một máy chủ, nhưng để tìm lỗi tôi cần phải sử dụng tên tài sản băm chính xác. – Ziggy

0

Có vẻ như đây có thể là lỗi trong Rails.Thay đổi cho đường ray sắp tới 3.2.9, đây có phải là điều bạn đang chạy không?

Tôn trọng config.digest = false cho asset_path

Trước đây, internals asset_path chỉ tôn trọng: tiêu hóa tùy chọn, nhưng bỏ qua các thiết lập cấu hình toàn cầu. Điều này có nghĩa rằng config.digest = false không thể được sử dụng kết hợp với config.compile = false điều này sửa chữa hành vi.

http://weblog.rubyonrails.org/2012/10/29/ann-rails-3-2-9-rc1-has-been-released/

Bạn có nghĩ rằng có thể liên quan?

+0

Tôi không nghĩ rằng cả hai có liên quan, bởi vì tôi tin rằng sự thay đổi có liên quan đến việc một thông báo đã được thêm vào tên tài sản hay không, trong khi vấn đề của tôi có liên quan nhiều hơn đến việc nén javascript. Có thể vấn đề tương tự tồn tại với config.asset.compression và họ chưa tìm thấy nó, tôi cho là vậy. Ở mức nào, cảm ơn cho những người đứng đầu về điều này. –

6

Cũng đáng chú ý ... Ngoài giải pháp ncherro bạn sẽ cần thực hiện như sau:

  1. đảm bảo đặt mô-đun mới của bạn ở nơi sẽ được tải theo mặc định. Đã lib/extras trong trường hợp của tôi.
  2. chạy rake assets:clean để xóa nội dung hiện tại của bạn.
  3. chạy rake assets:precompile để biên dịch nội dung của bạn bằng máy nén mới.
  4. khởi động lại ứng dụng của bạn ... tôi sử dụng touch tmp/restart.txt

Chúc mừng gỡ lỗi;)

11

Tôi cũng cần để gỡ lỗi js của tôi vì vậy tôi đã cố gắng giải pháp ncherro của. Vấn đề là nó vẫn sẽ ném

rake hủy bỏ! uninitialized NoCompression liên tục

Vì vậy, tôi chỉ cần đặt lớp NoCompression trong file production.rb

# Compress JavaScripts and CSS 
    class NoCompression 
     def compress(string) 
      # do nothing 
      string 
     end 
    end 

    config.assets.compress = true 
    config.assets.js_compressor = NoCompression.new 
    config.assets.css_compressor = NoCompression.new 
20

Dưới Rails 4 chỉ cho ý kiến ​​ra dòng

# config.assets.js_compressor = :uglifier 

trong config/environments/production.rb làm việc cho tôi . Hình như mặc định không phải là nén.

6

Nhận xét ra công cụ sửa lỗi và thêm config.assets.debug = true. Điều này làm việc cho tôi.

  • JavaScripts Nén và CSS:

    config.assets.js_compressor = :uglifier

  • chế độ Debug vô hiệu hóa nối và tiền xử lý tài sản. Nhưng tùy chọn này có thể gây ra sự chậm trễ đáng kể trong quan điểm vẽ với một số lượng lớn tài sản phức tạp:

    config.assets.debug = true

2

Với Rails 4 trên Heroku bạn cần phải làm hai việc. Đầu tiên là @geekQ đề cập, nhận xét ra dòng js_compressor trong config/environments/production.rb

# config.assets.js_compressor = :uglifier 

Thứ hai, bạn cần phải xem xét Heroku's asset pipeline cache for Rails 4. Bất kỳ tập tin với MD5 giống như phiên bản trong bộ nhớ cache sẽ không được biên dịch lại. Phiên bản trước đó (có thể được nén) sẽ được phân phối. Bất kỳ tệp nào bạn chỉnh sửa sẽ có MD5 mới và được biên dịch lại.

Bạn cũng có thể lọc toàn bộ bộ nhớ cache của tài sản bằng Heroku Repo plugin vào thanh công cụ Heroku. Cài đặt, sau đó sử dụng lệnh

heroku repo:purge_cache 

Triển khai phiên bản mới sau khi xóa bộ nhớ cache và tất cả nội dung của bạn sẽ được biên dịch lại.

+0

Xóa 'config.assets.js_compressor =: uglifier' là đủ để sửa nó – Dorian

1

Tôi phải cập nhật Rails.application.config.assets.version trong config/initializers/assets.rb để các thay đổi production.rb có hiệu lực.

1

Tìm và nhận xét ra những dòng trong environments/production.rb:

config.assets.js_compressor = ... 
config.assets.css_compressor = ... 
Các vấn đề liên quan