`

看unicorn时看到一篇写rails部署

阅读更多

Ruby on Rails 在佈署上面,有兩種模型:出自ihower.tw

全自動模型 Apache/Nginx + Passenger

Passenger   又叫做 mod_rails,是目前佈署 Ruby on Rails 最方便的方式,直接將對 Rails 的支援變成 Apache 或 Nginx 的模組,就像 mod_php 一樣。

Apache   是一套功能非常豐富、非常多人使用的開放原始碼 HTTP 伺服器,要在 Ubuntu 上安裝 Apache + Passenger 指令如下:

sudo apt-get install -y apache2-mpm-prefork  apache2-prefork-dev libapr1-dev libaprutil1-dev
sudo gem install passenger
sudo passenger-install-apache2-module
 

執行完 passenger-install-apache2-module 後會有一段設定,請將此設定加入 /etc/apache2/conf.d/mod_rails 檔案之中,例如:

passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/local/bin/ruby
 

假設你的 Rails 專案放在 /home/ihower/your_rails_app 目錄下,那麼可以新增 /etc/apache2/sites-enabled/your_rails_app.conf 這個專案的設定,例如:

<VirtualHost *:80>
    ServerAdmin ihower@gmail.com
    ServerName your_rails_app.ruby.tw
    DocumentRoot /home/ihower/your_rails_app/public
    ErrorLog /var/log/apache2/error-your_rails_app.log
    CustomLog /var/log/apache2/access-your_rails_app.log combined

    # Deflate
    AddOutputFilterByType DEFLATE text/html text/xml text/plain text/css application/x-javascript text/javascript;
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Directory "/home/ihower/your_rails_app/public">
        Options FollowSymLinks
        Order allow,deny 
        Allow from all 
        AllowOverride all
        Options -MultiViews
        FileETag none
    </Directory>

</VirtualHost>
 

注意到 DocumentRoot 和 Directory 是指向 public 這個靜態檔案的目錄。設定好之後,執行 sudo apache2ctl restart 便會啟用。如果之後你的 Rails 有任何修改要重新載入,但是並不想把 Apache 重開,請在你的 Rails 應用程式目錄下執行 touch tmp/restart.txt,這樣 mod_rails 就會知道要重新載入 Rails,而不需要重開 Apache。

Passenger 預設的 Rails 運行環境會是 production。在 production 環境下操作 Rails 指令有些必須加上環境變數,例如 rake db:migrate RAILS_ENV=production 或是主控台 rails console production

Nginx + Passenger

Nginx   則是另一套在 Rails 世界上還蠻常被使用的第二選擇,相較於 Apache 雖然功能較少,但執行效率更為良好。要讓 Nginx 裝上 Passgener 不需要先裝 Nginx,只需要執行以下指令:

sudo passenger-install-nginx-module

這是因為 Passenger 必須與 Nginx 一起編譯安裝的關係,所以 Passenger 的安裝指令就包括了安裝 Nginx。

反向代理(Reverse proxy)模型 Apache/Nginx + Mongrel/Thin/Unicorn

反向代理(Reverse proxy)模型就比較複雜了,它分成 Web 伺服器和 Application 伺服器,圖示如下:

images/deployment-1.jpg

其中 Web 伺服器會是 Apache 或 Nginx,但是它除了提供靜態檔案之外,其餘的任務就只是做 reverse proxy 將 request 分發到 Application 伺服器。

而 Application 伺服器負責執行 Ruby on Rails 程式,這有不少選擇:

相較於 Passenger,設定上會比較複雜。

多執行序架構 和 EventMachine 架構

(TODO) 參考  Does Rails Performance Need an Overhaul?   這一篇文章

Ruby on Rails 主機代管服務

可以參考這篇文章  The Best Ruby on Rails Hosting Services ,這些服務可以概分為:

  • Dedicated Server 專屬主機租用,一整台機器給你用
  • VPS (Vitual private server),使用 VM 技術將一整台機器分租給多人,因此你可以獲得 root 權限安裝你想裝的軟體。
  • Shared Host,提供固定的執行環境,例如只能執行 PHP 或 Rails。一台機器同時租用給非常多人。

相較於 PHP,Rails 的確是比較耗費資源的,所以會推薦 VPS 等級以上。

以上的租用方式都是以月來計算,比較沒有彈性。如果需要以小時計算、租用資源非常彈性的服務,那就是雲端了:

  • IaaS,例如  Amazon EC2   服務,你可以獲得一整台的 root 權限。
  • PaaS 則是固定的執行環境,例如比較有名的 Google App Engine (只提供 Java 和 Python 環境,如果要執行 Rails 需改用 JRuby)。而 Rails 也有專屬的 PaaS 服務,  Heroku ,非常推薦一用,它的最基本方案是免費的。

Heroku

安裝步驟

  • 安裝 Heroku 套件 gem install heroku
  • 在你的 Rails 目錄下執行 heroku create your_app_name

如果是 Windwos 使用者,Heroku 可能會無法正確找到你的 public key 位置,請執行以下步驟手動上傳:

$ heroku keys:add "%homedrive%%homepath%/.ssh/id_rsa.pub"

發佈步驟

  • git push heroku master (發佈程式到 Heroku 上)
  • heroku rake db:migrate (第一次發佈或有新 migration 需要執行時)

第三方服務

處理例外

(TODO) 請參考這篇文章  Why? 主動攔截 Rails exception 錯誤

效能監控

(TODO)  NewRelic

自動化部署

分享到:
评论

相关推荐

    浅析Ruby on Rails部署方案

    本篇文章将探讨十余种常见的Rails部署方案,重点介绍基于Lighttpd 1.5的解决方案,它们在解决并发问题和性能优化方面表现出色。 首先,Rails部署的核心挑战是处理高并发请求。由于Rails不是线程安全的,因此不能像...

    rails web server deploy guide

    由于没有实际的文本描述,我们将基于一般的Rails部署流程进行讨论。 标签 "源码" 和 "工具" 提示我们内容可能涉及到源代码管理和服务器管理工具。这可能包括Git用于版本控制,Capistrano或Deployer这样的工具来自动...

    Rails相关电子书汇总二

    虽然现代Rails应用更多地使用如Puma、Unicorn或Passenger等服务器,但理解Mongrel的运作机制仍然是提升开发者技能的一个方面。通过阅读这本书,你可以深入理解Web服务器的工作原理,这对于优化任何Web应用的性能都是...

    Complex Rails system_Rails_优化_

    本篇文章将深入探讨如何针对Rails系统的复杂架构进行优化。 一、数据库优化 1. **查询优化**:避免N+1查询问题,通过`includes`或`eager_load`预加载关联数据,减少数据库查询次数。使用`pluck`或`select`只获取...

    web_tools:Web工具

    1. **Ruby on Rails (RoR)框架**: Ruby on Rails是由David Heinemeier Hansson开发的一个开源Web应用框架,遵循MVC(模型-视图-控制器)架构模式。它使得开发者可以使用Ruby语言高效地构建功能丰富的Web应用程序。...

    RailsLab4:Web服务器编程

    2. **Web服务器**:Rails应用通常与一个Web服务器集成,如Puma、Unicorn或Webrick。这些服务器接收HTTP请求,然后转发给Rails应用进行处理。在RailsLab4项目中,可能涉及配置和优化服务器以提高性能。 3. **路由**...

    博物馆收藏应用

    在本篇文章中,我们将深入探讨如何利用Ruby这一强大的编程语言来构建这样一个应用,并揭示其背后的编程理念和技术栈。 Ruby,由松本行弘(Yukihiro Matsumoto)于1995年设计并开发,是一种面向对象的、动态类型的...

Global site tag (gtag.js) - Google Analytics