最近接手了一個ruby的web項目,由於之前沒有接觸過ruby以及相關的web開發,而且項目當中文檔缺失,所以在部署該項目的時候很是走了一些彎路。 最後參考多篇ruby on rails的開發環境部署,以及學習了下ruby當中的gem/bundler等的關係,成功部署專案。在這兒記一下,算是一個小的總結,也可以對ruby web開發剛入門部署環境時提供一個參考。
我們的專案是基於padrino,如果是基於rails的項目,部署應該也是差不多的。
1.安裝ruby
由於系統中可能有多個ruby相關的項目,而不同的項目可能需要針對不同的ruby版本進行或測試,所以系統當開發中可能需要安裝多個ruby的版本。而這就需要對應的工具來管理已有版本和安裝新版本。我這兒選用的是rbenv,也可以用老牌的rvm。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鏡像路徑,這裡直接使用本地路徑。注意本地路徑後面應該加上#來結尾
2. 安裝必要元件
因為我們一般採用bundler來管理專案所需的gems,所以此處是需要安裝bundler的。gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/之後執行gem sources -l應該只有https://ruby.taobao.org/這個來源
gem install bundler
3.原始碼放置到/opt/projectA
b.安裝依賴的gems
在專案的根目錄執行:bundle install此處需要注意,並根據不同的情況執行的命令可能略有差異。例如在生產環境部署時,可能需要執行
bundle install --deployment --without development test這樣部署時,相關的依賴gems被安裝到 projectA/vendor/bundle下面。尤其適合不同的專案依賴同一個gem的不同版本的時候使用。 c.資料庫相關遷移
padrino rake --envir db:migrate需要注意的是,此處視情況可能需要使用bundle來執行此指令:
bundle exec padrino rake --envir db:migratepadrino預設在db/seeds.rb當中完成admin帳號的建立。所以此處執行:
bundle exec padrino rake --envir seed執行過程當中會提示輸入admin帳戶的郵箱跟密碼
bundle exec unicorn -E production -c unicorn.rb -D這樣padrino server就已經正常啟動了。如果unicorn.rb當中監聽的是tcp端口,那麼此時訪問相應的url應該可以打開了。如果是採用的監聽unix socket的方式,那麼也應該使用nginx(或apache)來做反向代理。
nginx就是安裝linux一般軟體的安裝方式來安裝。建議使用源碼安裝方式。此處簡略起見,暫以套件管理器的安裝方式進行安裝:
sudo apt-get install nginx-fullb. 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; } }
unix:/tmp/projectA.sock進行處理。也即轉發到剛剛我們的web伺服器處理。