ruby on rails nginx 如何上傳大文件?

用ruby on

rails開發(fā)的web剂陡,用了carrierwave和dropzone實(shí)現(xiàn)了上傳文件狈涮。但后來(lái)發(fā)現(xiàn),一旦文件大于200M時(shí)鹏倘,就不行了,特別慢顽爹,雖說(shuō)carrierwave有個(gè)move_to_cache纤泵、move_to_store的選項(xiàng),但好像起不了作用镜粤。于是又去研究其它的上傳方式捏题,之后發(fā)現(xiàn)nginx的upload

module比較靠普,但這樣做有一個(gè)問(wèn)題就是nginx必須是編譯安裝的肉渴,要把upload

module一塊編譯進(jìn)行才能用公荧。在這里記錄一下實(shí)現(xiàn)的具體流程。

一同规、編譯安裝nginx循狰,并把upload module模塊編譯進(jìn)去

如果沒有安裝編譯工具,要先安裝編譯工具:yum -y install gcc automake autoconf libtool make

下載nginx: http://nginx.org/download/nginx-1.10.2.tar.gz

下載upload module: www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz

解壓:

tar -zxvf nginx-1.10.2.tar.gz

tar -zxvf nginx_upload_module-2.2.0.tar.gz

cd nginx-1.10.2

開始安裝:

./configure

--sbin-path=/usr/local/nginx/nginx \

--conf-path=/usr/local/nginx/nginx.conf \

--pid-path=/usr/local/nginx/nginx.pid \

--with-http_ssl_module \

--with-pcre=../pcre-8.40 \

--with-zlib=../zlib-1.2.11 \

--add-module=../nginx_upload_module-2.2.0

make && make install

如果沒有權(quán)限就加上sudo

nginx -v

提示:nginx version: nginx/1.10.2券勺, 則安裝成功

二绪钥、修改nginx的配置文件

# HTTPS server configuration

# 這個(gè)使用的是puma啟動(dòng)地址

upstream localurl {

server localhost:3000;

}

server {

listen?????? 80;

try_files?????? $uri/index.html $uri.html $uri @app_server;

index? index.html index.htm;

client_max_body_size? 2000m; # 大文件上傳支持

client_body_buffer_size 1024k;

location ~* ^/(assets)/{

expires???????? max;

gzip_static on; # to serve pre-gzipped version

add_header Cache-Control public;

break;

}

location ~* ^/(imgs|images|javascripts|stylesheets|img|assets|favicon.ico|download|fonts)/{

access_log????? off;

log_not_found?? off;

expires???????? max;

break;

}

## send request back to apache ##

# 設(shè)置代理

location / {

proxy_pass? http://localurl;

#Proxy Settings

proxy_redirect???? off;

proxy_set_header?? Host???????????? $host;

proxy_set_header?? X-Real-IP??????? $remote_addr;

proxy_set_header?? X-Forwarded-For? $proxy_add_x_forwarded_for;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

proxy_max_temp_file_size 0;

proxy_connect_timeout????? 200;

proxy_send_timeout???????? 1200;

proxy_read_timeout???????? 1200;

proxy_buffer_size????????? 4k;

proxy_buffers????????????? 4 128k;

proxy_busy_buffers_size??? 128k;

proxy_temp_file_write_size 128k;

}

# Upload form should be submitted to this location

location /uploads/file_upload {? # rails中要有相同可以上傳的地址,用來(lái)處理上傳成功后的邏輯

# autoindex on;

# Pass altered request body to this location

upload_pass?? @test;

# Store files to this directory

# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist

upload_store /upload_path/uploads; # 文件存放的路徑

# Allow uploaded files to be read only by user

upload_store_access user:rw group:rw all:rw; # 使用的用戶及權(quán)限关炼,可以根據(jù)需要調(diào)整

upload_limit_rate 0;

upload_max_file_size 0;

# Set specified fields in request body

upload_set_form_field $upload_field_name.name "$upload_file_name";

upload_set_form_field $upload_field_name.content_type "$upload_content_type";

upload_set_form_field $upload_field_name.path "$upload_tmp_path";

# Inform backend about hash and size of a file

upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";

upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";

upload_pass_form_field "^submit$|^description$";

upload_pass_form_field "authenticity_token|utf8";? #這里authenticity_token是rails的驗(yàn)證token程腹,要傳到后面rails里去,要不然rails會(huì)報(bào)錯(cuò)

upload_cleanup 400 404 499 500-505;

}

# Pass altered request body to a backend

location @test {

proxy_pass?? http://localurl;

}

}

三儒拂、rails處理文件

在相應(yīng)的controller里:

def file_upload

file = params["file.path"]? # 接收文件的存放路徑

FileUtils.mv file, "#{Rails.root}/public/uploads/filename.rar"? #把文件轉(zhuǎn)移需要的地方寸潦,nginx上傳后的文件名是一串字符并沒有擴(kuò)展名色鸳,所以這里要重命名一下。

# 這里寫邏輯代碼

end

這樣就完成了大文件的上傳和處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末见转,一起剝皮案震驚了整個(gè)濱河市命雀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌池户,老刑警劉巖咏雌,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異校焦,居然都是意外死亡赊抖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門寨典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氛雪,“玉大人,你說(shuō)我怎么就攤上這事耸成”叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵井氢,是天一觀的道長(zhǎng)弦追。 經(jīng)常有香客問(wèn)我,道長(zhǎng)花竞,這世上最難降的妖魔是什么劲件? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮约急,結(jié)果婚禮上零远,老公的妹妹穿的比我還像新娘。我一直安慰自己厌蔽,他們只是感情好牵辣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奴饮,像睡著了一般纬向。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戴卜,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天罢猪,我揣著相機(jī)與錄音,去河邊找鬼叉瘩。 笑死膳帕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播危彩,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攒磨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了汤徽?” 一聲冷哼從身側(cè)響起娩缰,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谒府,沒想到半個(gè)月后陈哑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾杭,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庇谆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祝峻。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京髓,死狀恐怖斩启,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芳誓,我是刑警寧澤余舶,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站锹淌,受9級(jí)特大地震影響匿值,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赂摆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一挟憔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧库正,春花似錦曲楚、人聲如沸厘唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抚垃。三九已至喷楣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹤树,已是汗流浹背铣焊。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罕伯,地道東北人曲伊。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坟募。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岛蚤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,535評(píng)論 1 41
  • 1.簡(jiǎn)介: ? Nginx:engine X ,2002年懈糯,開源涤妒,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評(píng)論 0 3
  • nginx在工作中已經(jīng)有好幾個(gè)環(huán)境在使用了,每次都是重新去網(wǎng)上扒博客赚哗,各種編譯配置她紫,今天自己也整理一份安裝文檔和n...
    AndyChin閱讀 2,298評(píng)論 0 4
  • 第一次聽到藏天朔的這首《朋友》已是很多年前扩所,以至于忘記了當(dāng)時(shí)是以怎樣一種心境來(lái)聽的围详,或許只是覺得新鮮又好聽罷了。不...
    選擇活著閱讀 10,015評(píng)論 4 4
  • 昨天去圍觀一摩登舞俱樂部聯(lián)歡會(huì)祖屏,碰到一老友助赞,大家都知道我在減肥,可是看到他的一瞬間袁勺,我整個(gè)人都不好了雹食,他朋友圈很少...
    時(shí)光呵閱讀 193評(píng)論 0 2