2012-04-18 24 views
5

Tôi đang gặp phải một số vấn đề với nội dung trên sản xuất: thiếu nội dung, công cụ được biên dịch thành các tệp sai (javascript cho "/ admin" được biên dịch vào mã giao diện người dùng, v.v.). Hầu hết các tài sản đến từ động cơ. Tôi muốn gỡ lỗi và tối ưu hóa điều này.Thực hiện hành động đường ống nội dung như sản xuất khi phát triển

Để làm điều đó, tôi cần phải biên dịch trước, phân phát và thất bại trên môi trường phát triển giống như được thực hiện trên sản xuất.

Tôi đã thêm một số dòng để config/development.rb tôi:

config.serve_static_assets = true 
    config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css) # @TODO: clean up, and optimize. 
    config.assets.compile = false 

Chạy này với rake RAILS_GROUPS=assets RAILS_ENV=development assets:precompile mang lại cho tôi tất cả các tài sản và các manifest.yml trong public/.

Nhưng sau đó máy chủ thất bại:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Spree/home#index 

Showing /xxxx/app/views/spree/shared/_head.html.erb where line #13 raised: 

favicon.ico isn't precompiled 

favicon.ico không biên dịch sẵn. Nhưng nó là! Ở đó, trong thư mục công cộng, trong manifest.yml và tôi có thể tìm nạp nó bằng trình duyệt (hoặc wget): http://localhost:3000/assets/favicon.ico.

LƯU Ý Favicon đơn giản là nội dung đầu tiên được gọi. Nếu tôi loại bỏ favicon, vấn đề chỉ đơn giản là bề mặt với các tài sản tiếp theo, là "all.js", hoặc, khi đó là tước, "all.css", và như vậy. Tôi có thể loại bỏ nó cho đến khi "footer_bg.png", và sau đó nó sẽ thất bại ở đó. Một lần nữa: vấn đề không phải là favicon, nhưng thực tế là việc phát triển môi trường không thấy các tài sản biên dịch trước.

Cần thêm gì nữa để có được phát triển đường dẫn nội dung tương tự như sản xuất?

EDIT: Giải thích rõ ràng hơn rằng favicon không phải là vấn đề, chỉ là một triệu chứng.

+0

Ngăn xếp môi trường sản xuất của bạn là gì? Máy chủ đơn/Multi-Server, Apache/Nginx, Heroku? Bạn đang triển khai sử dụng capistrano và sử dụng công thức capistrano? Bạn đang sử dụng config.serve_static_assets = true trong sản xuất? Bạn đã thử xử lý serve_static_assets thông qua apache/nginx thay vì trong Rails theo khuyến nghị của Rails chưa? – John

+0

Ngăn xếp sản xuất của tôi khá là một Hành khách hộp đen. Nó là một v5 site5. Tôi không triển khai với capistrano, nhưng với lệnh git-push && post-commit (còn gọi là git-deploy). 'config.serve_static_assets = true' bị tắt. Tôi đã cố gắng phục vụ tài sản máng Apache, vâng. Nó giải quyết rất ít. Là vấn đề tôi cố gắng giải quyết ở đây, môi trường ** phát triển ** của tôi không phục vụ tài sản của tôi như sản xuất. – berkes

Trả lời

2

tôi đã kết thúc cài đặt một apache, hành khách trên localhost để khắc phục sự cố.

Apache (có thể có thể là bất kỳ máy chủ nào có thể chở khách) do phân phát nội dung tĩnh. Hơn nữa, trên localhost tôi có thể bump verbosity apache trong các bản ghi của nó rất cao, cung cấp cho tôi đủ thông tin gỡ lỗi.

Hành khách mô phỏng phiên bản ruby ​​và tải đá quý càng nhiều càng tốt vào sản xuất.

Chạy trên webrick chỉ là quá khác nhau, ngay cả khi mô phỏng càng gần càng tốt, nó đã chứng minh quá khác so với ngăn xếp sản xuất; đó là lý do tại sao tôi không thể tái tạo các vấn đề sản xuất trong đó,

Bắn toàn bộ chồng như thể sản xuất đã cho phép tôi khắc phục sự cố.Điều này dẫn tôi đến kết luận rằng một số vấn đề đã gây ra tai họa tài sản: một tài sản đá quý không được chọn; vấn đề về quyền (tài sản được biên dịch không thể đọc được bởi dữ liệu www) và một số tài sản không được biên dịch đúng cách.

0

Tôi nghĩ bạn có thể muốn để lại favicon.ico trong public ...

alzabo0:~ $ rails --version 
Rails 3.2.3 
alzabo0:~ $ rails new ojoijoijo 
[...] 
     create public/404.html 
     create public/422.html 
     create public/500.html 
     create public/favicon.ico 
     create public/index.html 
     create public/robots.txt 
[...] 
+0

Có thể. Nhưng bên cạnh đó là điểm. Vấn đề không phải là favicon.ico, vấn đề là env phát triển của tôi. sẽ không nhận ra các tài sản được biên soạn, như tôi muốn nó. Và kể từ khi tôi đã chọn để chạy favicon máng đường ống tài sản (câu chuyện dài), nó là tập tin đầu tiên được bao gồm và chỉ đơn giản là một ví dụ về nơi mà các cuộn cảm đường ống tài sản. Nếu tôi di chuyển favicon ra khỏi đường ống, giống như bạn đề xuất, đường dẫn nội dung sẽ làm tắc nghẽn thêm một vài dòng nữa, trên một số tệp css hoặc js. – berkes

0

Chỉ cần một đoán, nhưng hãy thử thêm vào danh sách tiền biên dịch của bạn:

config.assets.precompile += %w(store/all.js store/all.css admin/all.js admin/all.css favicon.ico) 
+0

Điều đó thực sự hiệu quả. Điều kỳ lạ, đó là về sản xuất, điều này là không cần thiết. Và kể từ khi dòng này là một trong những điều chính mà tôi muốn làm sạch, sửa chữa và tối ưu hóa, điều này là chính xác một phần mà nên được "giống như trên sản xuất". – berkes

+0

thực sự lạ. có lẽ trên sản xuất, nếu bạn "cào tài sản: sạch" nó đột nhiên sẽ không làm việc ở đó? Làm thế nào để bạn tham khảo favicon.ico trong mẫu xem của bạn? Cá nhân, tôi không sử dụng người trợ giúp để tạo liên kết favicon.ico. Bạn đang sử dụng favicon_link_tag? Đó là một điều kỳ quặc như vậy, có lẽ để nó trong dev bây giờ và chuyển sang bit thú vị? – pduey

+0

Xin lưu ý rằng favicon * không phải là vấn đề *. Vấn đề là env phát triển của tôi sẽ không nhận ra tài sản khi biên dịch trước. Favicon * đơn giản chỉ là một ví dụ *. Khi tôi rời khỏi favicon, vấn đề vẫn còn, và sẽ xuất hiện với nội dung tiếp theo: tệp js hoặc css. – berkes

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