2014-04-20 27 views
5

Tôi đang thử nghiệm ứng dụng Rails 4 của mình trong môi trường sản xuất trên máy chủ cục bộ của mình: 3000 sử dụng máy chủ Webrick tích hợp. Khi tôi chạy RAILS_ENV=production bundle exec rake assets:precompile, nội dung được xây dựng lại ở nơi công khai và tệp kê khai được xây dựng lại, nhưng các trang vẫn đang được phân phối với tên nội dung trước đó.Làm cách nào để máy chủ Rails làm mới các tài sản biên dịch trước?

Khởi động lại máy chủ đường ray làm cho nội dung mới xuất hiện. Có một cách ít cực đoan để đạt được điều này và làm thế nào điều này sẽ hành xử khi tôi cảng này đến máy chủ sản xuất của tôi chạy Phusion hành khách. Tôi thực sự không muốn khởi động lại Apache để có được tài sản của tôi trong thiết bị.

+0

Được bật vân tay cho tài sản được biên soạn? –

+0

Có, các tài sản được biên dịch được lấy dấu vân tay. Cấu hình mặc định là Rails 4, ngoại trừ 'config.serve_static_assets = true' cần thiết để làm cho Webrick phân phát nội dung từ'/public', 'config.assets.digest = true' được thiết lập. Các tài sản có tên như 'application-01d7312dee865ebe9d525b15f2fbe7f0.css', đây là giá trị nằm trong tiêu đề trang. Vấn đề là phiên bản cũ vẫn đang được sử dụng sau khi phiên bản mới được xây dựng. –

+0

Phiên bản cũ hơn có nghĩa là bạn đã thay đổi nội dung chưa? Nếu bạn không thay đổi nội dung của tài sản, phiên bản được biên dịch trước sẽ giống như phiên bản trước và nếu bạn thay đổi một chút, dấu vân tay sẽ thay đổi và ứng dụng sẽ yêu cầu phiên bản mới chỉ khi bạn đã đặt 'config. assets.digest = true'. –

Trả lời

3

Nếu bạn không thay đổi nội dung của nội dung, phiên bản được biên dịch trước sẽ giống như phiên bản trước đó. Nếu bạn thay đổi nó một chút, dấu vân tay sẽ thay đổi và ứng dụng sẽ chỉ yêu cầu mã mới khi bạn đã đặt config.assets.digest = true.

Dù sao một công trình xung quanh sẽ là:

Chỉ cần chạy:

rake assets:clean 

và sau đó,

rake assets:precompile 

Điều này làm cho tất cả mọi thứ trong các đường ống tài sản được xây dựng lại và phục vụ tươi.

Đường ray tự động xóa bộ nhớ cache cho từng tệp riêng lẻ khi nội dung của nó được chỉnh sửa.

Nếu bất kỳ ở trên không hiệu quả, hãy thử như sau:

config.serve_static_assets = true trong config/môi trường/production.rb

config.serve_static_assets cấu hình Rails bản thân để phục vụ tài sản tĩnh. Mặc định là đúng, nhưng trong môi trường sản xuất bị tắt vì phần mềm máy chủ (ví dụ: Nginx hoặc Apache) được sử dụng để chạy ứng dụng sẽ phân phát nội dung tĩnh thay thế. Không giống như cài đặt mặc định, cài đặt này thành true khi chạy (tuyệt đối không được khuyến nghị!) Hoặc thử nghiệm ứng dụng của bạn ở chế độ sản xuất bằng cách sử dụng WEBrick. Nếu không, bạn sẽ không thể sử dụng bộ nhớ đệm trang và các yêu cầu cho các tệp tồn tại thường xuyên trong thư mục công khai sẽ được truy cập vào ứng dụng Rails của bạn.

Ref: http://guides.rubyonrails.org/configuring.html#rails-general-configuration

Hy vọng nó sẽ giúp :)

+0

Cảm ơn cho câu trả lời, nhưng, tất nhiên, tôi sửa đổi nội dung, và tôi đã thử cả 'tài sản cào: clean' và' tài sản cào: clobber' và 'serve_static_assets = true'. Tôi đã đọc hầu như mọi hướng dẫn trực tuyến đang tìm kiếm câu trả lời trước khi đăng bài ở đây. Tôi nghĩ rằng điều này thực sự có thể là một số loại vấn đề bộ nhớ đệm. –

+0

@PeterWooster Bạn đã cố gắng xóa các nội dung của 'công cộng/assets' bằng tay để xem những gì sẽ xảy ra? – roshiro

+0

@roshiro xóa công khai/tài sản làm cho trang web trông giống như năm 1996, không có kiểu javascript nào. –

1

Chúng tôi phải đối mặt với cùng một vấn đề mà các tài sản cũ đã được phục vụ ngay cả sau khi thử tài sản cào: sạch hoặc tài sản: clobber và cuối cùng máy chủ khởi động lại sẽ giải quyết vấn đề. Thủ phạm trong trường hợp của chúng tôi là kỳ lân. Trong khi triển khai ứng dụng đường ray của chúng tôi bằng cách sử dụng mina và mina-unicorn, chúng tôi chạy rake tài sản: clobber, sau đó biên dịch tài sản và sau đó khởi động lại kỳ lân cuối cùng. Bằng cách này, con sư tử kỳ lân không bao giờ bị dừng lại và tiếp tục thể hiện tài sản cũ. Vì vậy, chúng tôi đã thay đổi kịch bản triển khai mina của mình và thay vì khởi động lại kỳ lân, chúng tôi đã dừng lại lân và bắt đầu lại. Điều này giải quyết được vấn đề.Vì vậy, các bước chính là

  1. Triển khai ứng dụng

  2. tài sản chạy rake: clobber tài sản cào

  3. chạy: precompile

  4. dừng lân

  5. bắt đầu lân

Điều này giết chết khái niệm về thời gian ngừng hoạt động bằng 0 nhưng đây là giải pháp tốt hơn khởi động lại máy chủ.

Tôi hiểu rằng bạn sử dụng hành khách nhưng thông tin này có thể hữu ích cho những người khác

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