`
sitoto
  • 浏览: 124740 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Unicorn替代Mongrel作为Ruby on Rails的服务器

阅读更多
先前的开发的Ruby on Rails网站使用的服务程序是Mongrel + Nginx, 现在用了Rails 3, 发现Mongrel对它有兼容问题, 所以要换一个。 虽然现在Phusion Passenger大行其道, 但使用前要重新编译Nginx。 为了避免重新安装nginx,我找到mongrel的替代品Unicorn。 没想到unicorn的设置非常方便。 我记录在这里供大家参考:

安装unicorn:

sudo gem install unicorn

创建网站配置文件(myproject是项目名称):

sudo mkdir /etc/unicorn
cd /etc/unicorn/
sudo nano /etc/unicorn/myproject.conf

内容如下:

RAILS_ROOT=/www/myproject
RAILS_ENV=production

在网站里再创建一个unicorn配置文件

nano /www/myproject/config/unicorn.rb

内容如下:

# Minimal sample configuration file for Unicorn (not Rack) when used
# with daemonization (unicorn -D) started in your working directory.
#
# See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
# documentation.
# See also http://unicorn.bogomips.org/examples/unicorn.conf.rb for
# a more verbose configuration using more features.


app_path = "/www/myproject"


listen 8080 # by default Unicorn listens on port 8080
worker_processes 2 # this should be >= nr_cpus
pid "#{app_path}/tmp/pids/unicorn.pid"
stderr_path "#{app_path}/log/unicorn.log"
stdout_path "#{app_path}/log/unicorn.log"

设置unicorn启动脚本:

sudo nano /etc/init.d/unicorn_init

脚本内容:

#!/bin/sh
#
# init.d script for single or multiple unicorn installations. Expects at least one .conf
# file in /etc/unicorn
#
# Modified by jay@gooby.org http://github.com/jaygooby
# based on http://gist.github.com/308216 by http://github.com/mguterl
#
## A sample /etc/unicorn/my_app.conf
##
## RAILS_ENV=production
## RAILS_ROOT=/var/apps/www/my_app/current
#
# This configures a unicorn master for your app at /var/apps/www/my_app/current running in
# production mode. It will read config/unicorn.rb for further set up.
#
# You should ensure different ports or sockets are set in each config/unicorn.rb if
# you are running more than one master concurrently.
#
# If you call this script without any config parameters, it will attempt to run the
# init command for all your unicorn configurations listed in /etc/unicorn/*.conf
#
# /etc/init.d/unicorn start # starts all unicorns
#
# If you specify a particular config, it will only operate on that one
#
# /etc/init.d/unicorn start /etc/unicorn/my_app.conf


set -e

sig () {
test -s "$PID" && kill -$1 `cat "$PID"`
}

oldsig () {
test -s "$OLD_PID" && kill -$1 `cat "$OLD_PID"`
}

cmd () {

case $1 in
start)
sig 0 && echo >&2 "Already running" && exit 0
echo "Starting"
$CMD
;;
stop)
sig QUIT && echo "Stopping" && exit 0
echo >&2 "Not running"
;;
force-stop)
sig TERM && echo "Forcing a stop" && exit 0
echo >&2 "Not running"
;;
restart|reload)
sig USR2 && sleep 5 && oldsig QUIT && echo "Killing old master" `cat $OLD_PID` && exit 0
echo >&2 "Couldn't reload, starting '$CMD' instead"
$CMD
;;
upgrade)
sig USR2 && echo Upgraded && exit 0
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
$CMD
;;
rotate)
sig USR1 && echo rotated logs OK && exit 0
echo >&2 "Couldn't rotate logs" && exit 1
;;
*)
echo >&2 "Usage: $0 "
exit 1
;;
esac
}

setup () {

echo -n "$RAILS_ROOT: "
cd $RAILS_ROOT || exit 1
export PID=$RAILS_ROOT/tmp/pids/unicorn.pid
export OLD_PID="$PID.oldbin"

CMD="/usr/bin/unicorn_rails -c config/unicorn.rb -E $RAILS_ENV -D"
}

start_stop () {

# either run the start/stop/reload/etc command for every config under /etc/unicorn
# or just do it for a specific one

# $1 contains the start/stop/etc command
# $2 if it exists, should be the specific config we want to act on
if [ $2 ]; then
. $2
setup
cmd $1
else
for CONFIG in /etc/unicorn/*.conf; do
# import the variables
. $CONFIG
setup

# run the start/stop/etc command
cmd $1
done
fi
}


ARGS="$1 $2"
start_stop $ARGS

注意将里面的/usr/bin/unicorn_rails 换成你系统中unicorn_rails程序的实际路径。

设置unicorn_init文件属性:

sudo chmod 755 /etc/init.d/unicorn_init

启动unicorn:

/etc/init.d/unicorn_init

修改nginx的配置文件,加入unicorn的代理设置:

upstream myproject_mongrel {
server 127.0.0.1:8080 fail_timeout=0;
}

这部分跟使用mongrel的类似的。

这样unicorn的设置就完成了。 刚设置好,感觉unicorn跟mongrel一样, 都是比较吃内存的, 一启动就占了50M. 不知道会不会也像mongrel一样把内存吃爆, 会得话得设置监控软件(如god)看住它。
http://www.cslog.cn/Content/unicorn-for-ruby-on-rails/
分享到:
评论

相关推荐

    Ruby on Rails实践

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

    ruby on rails在线考试系统

    9. 布署与服务器配置:Rails应用通常部署在如Heroku、AWS或DigitalOcean等云平台上,使用Nginx或Apache作为反向代理,Passenger、Puma或Unicorn作为应用服务器。 10. 性能优化:Rails应用可以通过缓存、数据库索引...

    Rails 中mongrel的安装

    2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...

    基于ruby on rails 的简单blog

    4. **性能**:虽然不如Java或C++,但通过优化和使用如Puma、Unicorn等服务器,Rails应用也能有较好的性能表现。 这个简单的blog项目是初学者了解Rails的好起点,通过实践,可以掌握Rails的基本用法,进一步深入学习...

    ruby on rails

    5. **Web服务器**:Rails提供了内置的Webrick服务器用于开发,但在生产环境中,推荐使用如Puma、Unicorn或Nginx+Passenger等高性能服务器。 6. **开发工具**:如TextMate、Sublime Text、VS Code或Atom等文本编辑器...

    基于Ubuntu Nginx Mongrel Mysql部署rails monit-5.0

    3. **Mongrel**:Mongrel是Ruby Web服务器,专门设计用于运行Rails应用。它能快速解析Ruby代码,提供高效的HTTP服务。然而,由于不再活跃维护,现在更多地被Passenger或Unicorn等其他服务器代替,但在本场景中,...

    heroku-puma-demo:使用 Heroku 上的 Puma Web 服务器部署的 Ruby on Rails Web 应用程序演示

    在 Heroku 上使用 Puma Web 服务器的 Ruby on Rails 使用部署在Puma Web 服务器的示例 Ruby on Rails 应用程序。 2015 年 1 月 23 日,Heroku 宣布 Puma 为推荐的 Ruby Web 服务器。 来自: Heroku 现在推荐使用 ...

    Rails相关电子书汇总二

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

    shop:使用Ruby On Rails购买回购

    最后,应用部署可以选择Heroku、AWS或自建服务器,Rails应用通常配合Unicorn或Puma服务器运行。定期更新和维护是必不可少的,包括数据库迁移、错误监控和性能优化。 以上是根据“shop:使用Ruby On Rails购买回购”...

    Wrox.Professional.Ruby.on.Rails.Feb.2008

    ### Wrox Professional Ruby on Rails (Feb 2008) #### 概述 《Wrox Professional Ruby on Rails》是一本面向中级到高级Rails程序员的专业书籍。本书假设读者已经熟悉Ruby语言,并通过阅读入门级的Rails书籍或通过...

    brimir:使用Ruby on Rails和Zurb Foundation构建的电子邮件服务台

    安装Brimir是一个相当简单的Ruby on Rails应用程序。 进行设置的唯一困难是如何使收到的电子邮件正常工作。 有关详细信息,请参见下一部分。 任何Rails应用程序都首先需要具有Ruby支持的Web服务器。 我们自己使用...

    rails_sample_app:Ruby on Rails 教程

    完成开发后,可以将Rails应用部署到云服务提供商如Heroku,或者自建服务器上,如使用Nginx+Passenger、Puma或Unicorn等Web服务器。 通过深入研究`rails_sample_app`,你可以了解Rails的每个组件是如何协同工作的,...

    rails_comp_book:预订计算机硬件(ruby on rails 4.2.2,ruby 1.9.3,postgreSQL)

    标题“rails_comp_book:预订计算机硬件”暗示了这是一个关于如何为使用Ruby on Rails 4.2.2、Ruby 1.9.3和PostgreSQL数据库的项目选择适当硬件的指南。让我们深入探讨相关知识点: 1. **Ruby on Rails 4.2.2**:这...

    Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略

    在本文中,我们将深入探讨如何在Linux系统上配置一套高性能的Web开发环境,即Nginx、Ruby on Rails和MySQL的集成。这个配置方案被广泛推荐,特别是对于需要高效能和稳定性的Web应用。 首先,我们来安装RVM(Ruby ...

    rails 部署 nginx

    标题 "rails 部署 nginx" 涉及到的是在Web开发中使用Ruby on Rails框架结合Nginx服务器进行应用部署的相关知识。Nginx以其高性能、稳定性以及反向代理和负载均衡能力,常被用作Rails应用的前端服务器。下面将详细...

    rails文档API

    Ruby作为Rails的基础,是一种动态、面向对象的编程语言,以其简洁和表达性强而闻名。在Ruby中,代码通常更加可读和易于理解,这使得开发者能够快速构建功能丰富的应用程序。Ruby on Rails充分利用了Ruby的优点,提供...

Global site tag (gtag.js) - Google Analytics