`

浅谈Ruby on Rails - Rails 在服务器上的部署 (转)

阅读更多
--最近准备开发部署RoR,转一篇文章备用
     可以毫不夸张地说,服务器应用的部署是整个开发周期中难度最大的任务之一。且不说要如何使得应用可扩展性好、系统吞吐量大、稳定性好...单只让应用run起来,就不是一件很简单的事情。Rails作为一个Web应用框架,几乎是最大程度地减轻了开发人员的负担:安装Ruby运行环境、Rails和所需使用的数据库服务器之后,开发人员就可以开始用Rails自带的WEBrick服务器进行开发和调试了,基本上不需要对环境作太多的配置(当然,如果需要使用一些Ruby或者Rails的第三方库,自然是需要额外安装等)。然而到了将应用部署到实际环境中的时候,我们就要接触到繁杂的部署过程了,这时候,只靠官方的文档,往往是不够的,一般还要加上Google和最重要的,耐心。

好,在部署之前,我们看看Rails应用可以在什么环境下部署:
<!---->
通常来说,比较一下上面的表格,我们会很自然地选择lighttpd-fcgi这种方案来部署我们的应用,soopie正是选用了这一方案。

接下来我们给出Rails应用在Linux服务器上部署的基本过程:

  • 所需要的软件包:
    • lighttpd-1.4.10.tar.gz
    • fcgi-2.4.0.tar.gz
    • ruby-1.8.4.tar.gz
    • rubygems-0.8.11.tgz
    • ruby-fcgi-0.8.6.tgz
  • 安装步骤:
    • 安装Ruby
    • 安装rubygems
    • 安装ruby-fcgi
    • 安装rails,用命令行命令 gem install rails
    • 安装lighttpd(创建用户www和组www, 创建目录/var/lighty作为文档根目录, /var/lighty/logs作为日志目录)
    • 最关键的步骤:在lighttpd的配置文件(默认是/etc/lighttpd/lighttpd.conf)中配置rails应用支持。这里给出一个配置文件的完整例子(用Virtual host 方式配置,容易支持一个主机上多个rails应用):更详细的信息可以参考这里
      # lighttpd configuration file
      #
      # use it as a base for lighttpd 1.0.0 and above
      #
      # $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $

      ############ Options you really have to take care of ####################

      server.modules = (
      "mod_rewrite",
      "mod_access",
      "mod_fastcgi",
      "mod_simple_vhost",
      "mod_evhost",
      "mod_accesslog" )

      ## a static document-root, for virtual-hosting take look at the
      ## server.virtual-* options
      server.document-root = "/var/lighty/cartrain/public"

      ## where to send error-messages to
      server.errorlog = "/var/lighty/logs/lighttpd.error.log"

      # files to check for if .../ is requested
      #index-file.names = ( "index.php", "index.html",
      # "index.htm", "default.htm" )

      ## set the event-handler (read the performance section in the manual)
      # server.event-handler = "freebsd-kqueue" # needed on OS X

      # mimetype mapping
      mimetype.assign = (
      ".pdf" => "application/pdf",
      ".sig" => "application/pgp-signature",
      ".spl" => "application/futuresplash",
      ".class" => "application/octet-stream",
      ".ps" => "application/postscript",
      ".torrent" => "application/x-bittorrent",
      ".dvi" => "application/x-dvi",
      ".gz" => "application/x-gzip",
      ".pac" => "application/x-ns-proxy-autoconfig",
      ".swf" => "application/x-shockwave-flash",
      ".tar.gz" => "application/x-tgz",
      ".tgz" => "application/x-tgz",
      ".tar" => "application/x-tar",
      ".zip" => "application/zip",
      ".mp3" => "audio/mpeg",
      ".m3u" => "audio/x-mpegurl",
      ".wma" => "audio/x-ms-wma",
      ".wax" => "audio/x-ms-wax",
      ".ogg" => "application/ogg",
      ".wav" => "audio/x-wav",
      ".gif" => "image/gif",
      ".jpg" => "image/jpeg",
      ".jpeg" => "image/jpeg",
      ".png" => "image/png",
      ".xbm" => "image/x-xbitmap",
      ".xpm" => "image/x-xpixmap",
      ".xwd" => "image/x-xwindowdump",
      ".css" => "text/css",
      ".html" => "text/html",
      ".htm" => "text/html",
      ".js" => "text/javascript",
      ".asc" => "text/plain",
      ".c" => "text/plain",
      ".cpp" => "text/plain",
      ".log" => "text/plain",
      ".conf" => "text/plain",
      ".text" => "text/plain",
      ".txt" => "text/plain",
      ".dtd" => "text/xml",
      ".xml" => "text/xml",
      ".mpeg" => "video/mpeg",
      ".mpg" => "video/mpeg",
      ".mov" => "video/quicktime",
      ".qt" => "video/quicktime",
      ".avi" => "video/x-msvideo",
      ".asf" => "video/x-ms-asf",
      ".asx" => "video/x-ms-asf",
      ".wmv" => "video/x-ms-wmv",
      ".bz2" => "application/x-bzip",
      ".tbz" => "application/x-bzip-compressed-tar",
      ".tar.bz2" => "application/x-bzip-compressed-tar"
      )

      # Use the "Content-Type" extended attribute to obtain mime type if possible
      #mimetype.use-xattr = "enable"


      ## send a different Server: header
      ## be nice and keep it at lighttpd
      # server.tag = "lighttpd"

      #### accesslog module
      accesslog.filename = "/var/lighty/logs/access.log"

      ## deny access the file-extensions
      #
      # ~ is for backupfiles from vi, emacs, joe, ...
      # .inc is often used for code includes which should in general not be part
      # of the document-root
      url.access-deny = ( "~", ".inc" )

      $HTTP["url"] =~ "\.pdf$" {
      server.range-requests = "disable"
      }

      ##
      # which extensions should not be handle via static-file transfer
      #
      # .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
      static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

      ######### Options that are good to be but not neccesary to be changed #######

      ## bind to port (default: 80)
      server.port = 80

      var.osapp = "/var/lighty/cartrain"
      $HTTP["host"] == "cu.ttthree.com"{
      server.document-root = var.osapp + "/public"
      server.error-handler-404="/dispatch.fcgi"
      fastcgi.server =
      ( ".fcgi" =>
      ( "localhost" =>
      ( "min-procs" => 2,
      "max-procs" => 2,
      "socket" => "/tmp/mycoolapp.fcgi.socket",
      "bin-path" => var.osapp+ "/public/dispatch.fcgi",
      "bin-environment" => ( "RAILS_ENV" => "development" )
      )
      )
      )
      }

      url.rewrite = (
      "^/([\-_a-zA-Z0-9]+)/([\-_a-zA-Z0-9]+)/([\-_a-zA-Z0-9%]+)\??([\-_a-zA-Z0-9=&%]*)$" =>
      "/dispatch.fcgi?controller=$1&action=$2&id=$3&$4",
      "^/([\-_a-zA-Z0-9]+)/([\-_a-zA-Z0-9]+)/?\??([\-_a-zA-Z0-9=&%]*)$" =>
      "/dispatch.fcgi?controller=$1&action=$2&$3",
      "^/([\-_a-zA-Z0-9]+)/?\??([\-_a-zA-Z0-9=&%]*)$" =>
      "/dispatch.fcgi?controller=$1&action=index&$2"
      )
分享到:
评论

相关推荐

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Ruby on Rails安装包全集(Linux)

    在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,帮助用户在Linux系统上顺利构建RoR开发环境。 1. **readline-5.1.tar.gz**: 这是Readline库的源代码包,它提供了一种交互...

    Ruby on Rails Tutorial

    在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...

    ruby on rails 101

    - **部署、安全与性能**:讲解如何部署Ruby on Rails应用、实施安全措施以及优化性能。 #### 结语 通过这五天的课程,读者不仅能够系统地学习Ruby on Rails的核心概念和技术,还能了解到一些高级主题。无论是初学者...

    Ruby-on-Rails-rails.zip

    Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机.zip

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...

    Ruby on Rails 教程 - 201406

    Ruby on Rails,简称ROR或Rails,是一款基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率和代码可读性。本教程“Ruby on Rails 教程 - 201406”可能是针对2014年6月时...

    ruby on rails最新版

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...

    Ruby on Rails实践

    在部署方面,Rails应用通常运行在如Passenger、Unicorn或Puma这样的服务器上,配合Nginx或Apache作为反向代理。Heroku、DigitalOcean和AWS等云平台为Rails应用提供了便捷的部署选项。 总的来说,Ruby on Rails实践...

    Ruby-on-Rails-3.rar_site:www.pudn.com

    《Ruby-on-Rails-3.rar》是一个在Pudn网站上分享的压缩文件,主要针对的是希望通过Ruby语言进行Web开发的初级程序员。该资源的核心内容是《Web开发敏捷之道 - 应用Rails进行敏捷Web开发 - 第三版》这本书的PDF版本。...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    ruby on rails 3 tutorial.pdf

    《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...

    ruby on rails for dummies

    总之,《Ruby on Rails for Dummies》是一本全面介绍Rails开发的入门书籍,无论你是编程新手还是想从其他语言转战Rails,都能从中获益匪浅。通过阅读和实践书中的例子,你将能够掌握构建现代Web应用所需的技能,并...

    Ruby on Rails入门权威经典

    《Ruby on Rails入门权威经典》是一本专门为初学者设计的指南,旨在帮助读者全面掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言的开源框架,以其“DRY(Don't Repeat ...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。在这个开发环境包中,我们拥有Ruby ...

    Ruby On Rails教程

    ### Ruby on Rails 教程知识点概述 #### 一、引言 - **敏捷开发与Rails:** 本书《Ruby on Rails教程》强调了Rails作为敏捷开发框架的优势。它旨在帮助开发者快速构建高质量的Web应用程序。 - **作者团队:** 本书...

    ruby on rails 教程源码

    Ruby on Rails,简称Rails,是基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在使开发过程更加简洁高效。这个“ruby on rails 教程源码”很可能是为了辅助学习者深入理解Rails的...

Global site tag (gtag.js) - Google Analytics