我无法使send_file(Model.attachment.path)工作。它不会失败,而是向客户端发送一个0字节大小的文件,但文件名正确。
我从Rails 2.3.8迁移到3后开始发生此问题。
此迁移中发生了很多其他事情,我将尽力详细说明所有这些事情。
我通过ftp移动了附件,因为它们不是我的git存储库的一部分,所以它们是通过cap deploy发布的,而是通过手动ftp
remote(RHEL5)到local(Win7),然后是local(Win7)到remote(Ubuntu10)。
我确实知道FTPing不会通过传输保留文件权限,因此我所做的也是模仿以前服务器上看到的chmod,因此它们几乎相同。(用户/组不同,设置为root:root而不是olduser:olduser)。
从我的生产日志中下载附件的请求的摘录。
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
没事的 我还要排除本地问题,我尝试在Win7和Ubuntu(在Vbox上)上通过Chrome下载。
我还要向你保证,道路的确是正确的。
root@li162-41:/srv/app/current# tail /srv/app/releases/20100916094249/attachments/replies/UE0003-Requisition_For_Compensation_Leave.doc
#
#
%17nw
HQ��+1ae����
%33333333333(��QR���HX�"%%��@9
��@�p4��#P@��Unknown������������G��z �Times New Roman5��Symbol3&�
�z �Arial5&�
因此,总而言之,我该如何使send_file实际发送文件而不是伪造的0字节垃圾。
send_file
具有在Rails 3中:x_sendfile
默认使用的参数true
。此功能通过返回带有路径的X-
Sendfile标头的空响应,将流下载卸载到前端服务器-Apache(带有mod_xsendfile)或lighttpd。
Nginx使用X-Accel-Redirect
标头来实现相同的功能,但是您必须在正确的环境文件中正确配置Rails:
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
Rails 3更新 :该行已存在于中production.rb
,只需取消注释即可。
添加sendfile on;
到您的nginx配置中,以利用Rails发送的标头。请记住,必须使用绝对路径,并且nginx必须具有对文件的读取权限。
别名文件的另一种方法:
为了提高安全性,我在nginx中使用别名而不是绝对路径,但是send_file
方法会检查是否存在以别名失败的文件。因此,我将操作更改为:
head(
'X-Accel-Redirect'=> file_item.location,
'Content-Type' => file_item.content_type,
'Content-Disposition' => "attachment; filename=\"#{file_item.name}\"");
render :nothing => true;
我正在为一个现有的客户端创建一个服务器。该客户端使用套接字和DataInPutStream从服务器读取输入。它使用以下方法检查服务器结束消息: 在服务器上,我使用serversocket和DataOutputStream向客户端发送消息: 我如何发送一个0字节,以便客户端知道它是消息的结尾?
使用Apache Commons FTPSClient,下载的文件始终存储为0字节。我尝试了不同的方法,但在存储的文件中总是得到0字节。在下面的代码中,我展示了这三种方法。 以下是使用的代码:
我是ruby和ruby on rails的新手,在设置Twilio发送短信时遇到了麻烦。
我的第一个疑惑是yml和yaml有什么区别?我应该用哪一个。此外,我必须把我的标签在yml文件,并加载它们。所以我不知道该怎么做。这方面的任何例子或教程都会非常有帮助。
我对妮蒂很陌生。我目前正在编写一个非常简单的Echo客户端和服务器,但是我尝试从客户端向服务器发送< code>byte[]而不是String或ByteBuf。我成功地用字符串消息编写了相同的客户机\服务器。 在相同的代码中,我只是将“解码器\编码器”改为使用< code>byte[]。 我在下面张贴我的代码。 -启动客户端的主类 - Define pipeline - 主客户端处理程序 -启动服
问题内容: 我有,并且在我的Rails应用程序中。 我试图接管发送电子邮件。但没有运气。我遵循了这样的指示: 添加到模型: 创建一个初始化程序: 我尚未在邮件中进行任何自定义修改 这是创建新帐户时控制台中显示的内容: 我的Sidekiq日志没有显示任何内容。 有任何想法吗? 问题答案: 设置。