首頁  >  文章  >  後端開發  >  nginx+unicorn部署ruby web環境

nginx+unicorn部署ruby web環境

WBOY
WBOY原創
2016-08-08 09:23:371199瀏覽


    最近接手了一個ruby的web項目,由於之前沒有接觸過ruby以及相關的web開發,而且項目當中文檔缺失,所以在部署該項目的時候很是走了一些彎路最後參考多篇ruby on rails的開發環境部署,以及學習了下ruby當中的gem/bundler等的關係,成功部署專案。在這兒記一下,算是一個小的總結,也可以對ruby web開發剛入門部署環境時提供一個參考。
    我們的專案是基於padrino,如果是基於rails的項目,部署應該也是差不多的。

    1.安裝ruby

    由於系統中可能有多個ruby相關的項目,而不同的項目可能需要針對不同的ruby版本進行或測試,所以系統當開發中可能需要安裝多個ruby的版本。而這就需要對應的工具來管理已有版本和安裝新版本。我這兒選用的是rbenv,也可以用老牌的rvm。
     安裝rbenv
git clone git://github.com/sstephenson/rbenv.git  ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
新增ruby-build元件
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
新增gem-rehash元件
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
安裝ruby(以ruby2.1.5為例)
的文件,然後使用本地安裝的方式來安裝
wget -O ~/.rbenv/versions/ruby-2.1.5.tar.gz http://ruby.taobao.org/mirrors/ruby/2.1/ruby-2.1.5.tar.gz
env RUBY_BUILD_MIRROR_URL=file:///home/ziven/.rbenv/versions/ruby-2.1.5.tar.gz# ~/.rbenv/bin/rbenv install 2.1.5
其中wget是下載相應的ruby文件,這裡是ruby-2.1.5.tar.gz
RUBY_BUILD_MIRROR_URL
用來指定安裝的ruby鏡像路徑,這裡直接使用本地路徑。注意本地路徑後面應該加上#來結尾
rbenv install命令後面的版本應該跟要安裝的ruby版本對應,例如可能安裝的版本是帶有相應的補丁編號的(例如: 1.9.3-p223),此處也應該寫上。

2. 安裝必要元件

    因為我們一般採用bundler來管理專案所需的gems,所以此處是需要安裝bundler的。
    考慮到國內連接ruby鏡像的速度,我們更換gem源為taobao源。
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
之後執行gem sources -l應該只有https://ruby.taobao.org/這個來源
    安裝bundler
   
gem install bundler

3.原始碼放置到/opt/projectA

    b.安裝依賴的gems

    在專案的根目錄執行:
bundle install
    此處需要注意,並根據不同的情況執行的命令可能略有差異。例如在生產環境部署時,可能需要執行
bundle install --deployment --without development test
這樣部署時,相關的依賴gems被安裝到 projectA/vendor/bundle下面。尤其適合不同的專案依賴同一個gem的不同版本的時候使用。

    c.資料庫相關遷移
    由於本專案是基於padrino所以需要執行:
padrino rake --envir db:migrate
需要注意的是,此處視情況可能需要使用bundle來執行此指令:

bundle exec padrino rake --envir db:migrate
 padrino預設在db/seeds.rb當中完成admin帳號的建立。所以此處執行:
bundle exec padrino rake --envir seed
執行過程當中會提示輸入admin帳戶的郵箱跟密碼

    d.unicorn部署
     此處可能需要對應的unicorn啟動腳本,可以參考ruby-china的unicorn.rb來寫。此處從略。
啟動unicorn server:

bundle exec unicorn -E production -c unicorn.rb -D
這樣padrino server就已經正常啟動了。如果unicorn.rb當中監聽的是tcp端口,那麼此時訪問相應的url應該可以打開了。如果是採用的監聽unix socket的方式,那麼也應該使用nginx(或apache)來做反向代理。
4. nginx的安裝設定

    a. nginx的安裝

    nginx就是安裝linux一般軟體的安裝方式來安裝。建議使用源碼安裝方式。此處簡略起見,暫以套件管理器的安裝方式進行安裝:

sudo apt-get install nginx-full

    b. nginx的設定
	upstream myserver {
	  server unix:/tmp/projectA.sock fail_timeout=0;
	}
	
	server {
	    listen       7788;
	    server_name  localhost;
	
	    client_max_body_size 10M;
	
	    error_page   500 502 503 504  /50x.html;
	    location = /50x.html {
	        root   /usr/share/nginx/html;
	    }
	
	    root /opt/projectA/web/public;
	
	    try_files $uri $uri.html @app;
	
	    location @app {
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header Host $http_host;
	        proxy_redirect off;
	        proxy_pass http://myserver;
	    }
	}

此處將7788連接埠的請求轉送到

unix:/tmp/projectA.sock
進行處理。也即轉發到剛剛我們的web伺服器處理。
至此,server已經可以正常運作。其他的一些輔助功能可以根據需要進行添加。例如nginx可能需要ssl憑證來認證。 ruby on rails專案的部署大同小異,其部署過程當中可能在執行相應的命令時需要根據情況做相應的調整。不過只要熟悉了ruby web的部署方式,其他的可以參考相關框架的文件還是比較容易部署的。

以上就介紹了nginx+unicorn部署ruby web環境,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn