2011-09-02 54 views
8

Tôi chỉ làm quen với Rails 3.1 và tôi đã đốt một số thời gian để cập nhật dự án cũ và cố gắng tìm ra cách đường dẫn nội dung mới hoạt động trong chế độ phát triển so với sản xuất.Làm thế nào để bạn bắt lỗi trong đường ống tài sản đường ray trước khi sản xuất?

Giá trị mặc định config.assets.precompile thiết lập ban phước chỉ application.cssapplication.js, với ý định rằng tất cả mọi thứ nên được phục vụ như là một kiểu duy nhất và một tập tin javascript duy nhất.

Rõ ràng có những tình huống khi chúng ta không muốn điều đó, vì vậy chúng ta có thể thêm các mục vào danh sách trong đó biến cấu hình ...

Dưới đây là tình hình tôi chạy vào với dự án sandbox của tôi khi đưa vào sản phẩm:

  1. Đã duyệt trang web đang phát triển, thấy mọi thứ đang hoạt động. Các tài sản được liên kết dưới dạng các tệp riêng biệt và trang web được hiển thị chính xác.
  2. Đã tải trang web lên máy chủ của tôi và cố gắng làm cho trang web hoạt động trong sản xuất. Lỗi đầu tiên là nói rằng "ie.css" (biểu định kiểu có điều kiện) không được biên dịch trước. (Tôi đã ở Safari và biểu định kiểu này thậm chí sẽ không được tải xuống: lỗi được nêu ra từ trình trợ giúp stylesheet_link_tag trước khi hiển thị trang.)
  3. Ran rake assets:precompile và thử lại.
  4. Đã thêm mục vi phạm vào config.assets.precompile và thử lại.
  5. Đã khắc phục lỗi xuống lề đường cho đến khi gặp lỗi nội dung khác.
  6. GOTO 3.

Không biết làm thế nào để giải quyết vấn đề này, tôi đã đi vòng vòng một vài lần cho đến khi tôi nghĩ rằng tôi có tất cả các tài sản và các trang web đã được render trong sản xuất. Sau đó, tôi đã thử nó trong MSIE và nhấn một lỗi khác 500: "belated_png_fix.js" đã được tải theo điều kiện và nó không được cắt lên cho đến lúc đó. Vì vậy, câu hỏi của tôi là, ngoài thử nghiệm và lỗi hoặc phụ thuộc nhiều vào thử nghiệm tích hợp, làm cách nào tôi có thể dự đoán rằng trang web của tôi sẽ không bị phát hiện khi đường dẫn nội dung phát hiện ra rằng một số biểu định kiểu hoặc javascript không được thêm vào vào danh sách biên dịch trước?

Tôi cũng tò mò tại sao nội dung bảng định kiểu bị thiếu nên khiến toàn bộ trang bị lỗi 500 thay vì chỉ biên dịch trang theo yêu cầu hoặc phân phát 404 khi nội dung đó được yêu cầu. Đây có phải là một thiết kế có chủ ý để "thất bại sớm" không?

+0

Gần đây, tôi đã chuyển đổi một ứng dụng cũ sang đường dẫn nội dung và không có vấn đề gì. Phải mất một thời gian để tôi tìm ra cách mọi thứ hoạt động cùng nhau. Để trả lời câu hỏi của bạn, bạn có thể hiển thị nội dung của tệp css và js của mình, cụ thể là các câu lệnh yêu cầu không? Tôi cũng quan tâm đến cách bạn đang gọi chúng từ quan điểm. Cuối cùng là tất cả trong ứng dụng/tài sản hoặc bạn đang sử dụng lib/tài sản và nhà cung cấp/tài sản là tốt? –

Trả lời

1

Tôi cũng gặp sự cố tương tự với đường ray 3.1. Điều tốt nhất bạn có thể làm là cài đặt capistrano đa giai đoạn và có được một máy chủ dàn dựng.

Nếu vì bất kỳ lý do nào là không thể, hãy cài đặt máy ảo trên máy tính của bạn và cố gắng sao chép môi trường máy chủ của bạn.

+0

Có, tôi đã làm điều này, về cơ bản. Nó nằm dưới tiêu đề "trial-and-error" (chắc chắn có thể được tự động với một số test tích hợp ... có thể không có cách nào tốt hơn.) –

0

Điều này có thể quá mức cần thiết, nhưng điều này phù hợp với tôi (nó mang lại cho tôi tài sản được biên soạn, rõ ràng). Tôi có điều này trong tập tin .bash_profile của tôi.

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

và điều này trong cấu hình/môi trường/sản xuất của tôi.rb (sản xuất các lực lượng biên dịch khi cần thiết, không phải là một nhu cầu nếu tôi nhớ để chạy "ggo" đầu tiên):

config.assets.compile = true 

Vì vậy, công việc của tôi là: 1. Mã 2. git add & git commit 3. Nếu tôi chạm vào các tệp CSS/SASS/JS/CoffeeScript, tôi chạy ggo. Nếu không, tôi sẽ triển khai giới hạn mức bình thường.

+0

Bí quyết hữu ích, nhưng vấn đề là biên dịch trước chỉ hoạt động trên các mục mà nó biết trong khoảng. Bí quyết là bằng cách nào đó tìm ra những nguồn lực được liên kết từ các quan điểm khác nhau và đảm bảo rằng chúng được thêm vào danh sách. –

1

Triển khai liên tục là một điều tuyệt vời, và bạn nên đến mức nó đơn giản đến nỗi nó thực sự không phải là điều đau đớn. Điều đó đang được nói, config.assets.precompile có thể mất regex, vậy làm thế nào về bạn đưa ra một tiêu chuẩn cho sprockets cấp cao nhất "manifest" tập tin, hoặc một thư mục phụ tiêu chuẩn cho những thứ mà sẽ không được đóng gói? (lưu ý rằng tôi chưa thực sự thử điều này ...)

2

Tôi vừa mới phát hành một viên đá quý được gọi là assets_precompile_enforcer, đảm bảo rằng các nhà phát triển sẽ không quên thêm nội dung vào config.assets.precompile khi đang phát triển. Một ngoại lệ sẽ được nâng lên nếu bạn bao gồm nội dung qua javascript_include_tag hoặc stylesheet_link_tag và không khớp với bộ lọc trong config.assets.precompile.

Điều này có nghĩa là lỗi nội dung sẽ bị phát hiện trong quá trình phát triển thay vì được phát hiện sau khi triển khai sang sản xuất.

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