Tôi không thể gửi send_file (Model.attachment.path) để hoạt động. Nó không thất bại, thay vào đó, nó sẽ gửi một tập tin kích thước 0 byte cho khách hàng, tên tập tin là chính xác mặc dù.Đường ray gửi 0 byte tệp bằng send_file
Vấn đề này bắt đầu xảy ra sau khi tôi đã làm một sự chuyển đổi lớn từ Rails 2.3.8 để 3.
Đã có rất nhiều những thứ khác diễn ra trong sự chuyển đổi này và tôi sẽ cố gắng hết sức mình đến từng chi tiết tất cả trong số họ .
- Thay đổi thay đổi máy chủ/Thay đổi máy chủ. Rackspace RHEL5 Linode Ubuntu 10.04LTS
- phiên bản Ruby thay đổi, 1.8.6 -> 1.9.2
- Rails phiên bản thay đổi, 2.3.8 -> 3.0.0
- httpd nền tảng thay đổi, apache2 -> nginx (Tuy nhiên Tôi đã thử trên apache2 là tốt và nó đã không hoạt động).
Tôi đã di chuyển tệp đính kèm qua ftp vì chúng không phải là một phần của kho lưu trữ git của chúng để chúng được xuất bản thông qua triển khai mũ, thay vào đó điều khiển từ xa ft (RHEL5) đến địa phương (Win7) rồi địa phương (Win7) đến từ xa (Ubuntu10)).
Tôi biết rằng FTPing không giữ quyền truy cập tệp thông qua chuyển khoản, vì vậy những gì tôi cũng đã làm là bắt chước các chmod đã được thấy trên các máy chủ trước của tôi để chúng gần giống nhau. (người dùng/nhóm khác nhau, đặt thành root: root thay cho olduser: olduser).
Đoạn trích yêu cầu tải xuống tệp đính kèm từ nhật ký sản xuất của tôi.
Started GET "/attachments/replies/1410?1277105698" for 218.102.140.205 at 2010-09-16 09:44:31 +0000
Processing by AttachmentsController#replies as HTML
Parameters: {"1277105698"=>nil, "id"=>"1410"}
Sent file /srv/app/releases/20100916094249/attachments/replies/UE0003-Requisition_For_Compensation_Leave.doc (0.2ms)
Completed 200 OK in 78ms
Mọi thứ đều ổn. Hãy để tôi cũng loại trừ các vấn đề địa phương, tôi đã thử tải xuống qua Chrome trên cả Win7 và Ubuntu (trên Vbox).
Hãy để tôi cũng đảm bảo với bạn rằng đường dẫn thực sự chính xác.
[email protected]:/srv/app/current# tail /srv/app/releases/20100916094249/attachments/replies/UE0003-Requisition_For_Compensation_Leave.doc
#
#
%17nw
HQ��+1ae����
%33333333333(��QR���HX�"%%��@9
��@�p4��#[email protected]��Unknown������������G��z �Times New Roman5��Symbol3&�
�z �Arial5&�
Vì vậy, để tổng hợp câu hỏi, làm cách nào để gửi send_file thực sự gửi tệp thay vì rác giả 0 byte giả mạo.
Tôi thực sự phát hiện ra giải pháp ngày hôm qua và viết blog về nó ngày hôm nay http://www.novafist.com/2010/09/send_file-sends-0- byte-to-client-in-rails/ – fivetwentysix
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' thậm chí còn tốt hơn head(). – gertas
Cảm ơn câu trả lời, đã cứu tôi một thời gian! –