图片 2

26上使用Nginx和Passenger部署Ruby应用程序

Phusion Passenger是一个应用程序服务器,可以像Apache和Nginx
Web服务器那样集成到Web服务器中,并允许通过Web服务器提供Ruby /
Rails应用程序。 在生产系统上部署Ruby on Rails应用程序是一个不错的选择。
本文将帮助您在Linux系统(如CentOS
7/6和Fedora
27/26)上使用Nginx来部署Ruby on Rails应用程序。
您可以将本教程用于测试以及生产部署。

  Ruby on Rails是一个非常高效的Web应用程序框架由David Heinemeier
Hansson使用Ruby语言编写。 这是一个开源 Ruby
框架,用于开发数据库支持的Web应用程序。Ruby on Rails简称ROR。
  因为有人说不建议在win上使用ROR,所以我使用Ubuntu
Linux来部署ROR的环境。Ubuntu是14.04.4 LTS版本,具体步骤如下:

本文介绍如何使用Nginx+Passenger来部署Ruby on
Rails环境,本文使用的操作系统版本是CentOS6.5。
1.安装ruby

首先,我们假设你已经在你的系统上安装了Ruby。
如果您没有安装Ruby,请使用以下URL根据您的应用程序要求进行安装。

  • sudo apt-get install ruby
  • gem sources -l
  • gem sources –remove
  • gem sources -a
  • gem sources -l
    检查: ruby -v 、gem -v
  • sudo gem install rails
    如果报错,则# sudo apt-get install ruby-railties
    检查:rails -v
    这样Ruby On Rails开发环境就算搭建好了!
    //在当前目录test下创建一个blog文件夹,blog文件夹就是web根目录
  • pwd
  • mkdir test
  • cd test
  • rails new blog
    修改Gemfile文件,替换 https://rubygems.org
  • rails new -h 可以查看新程序生成器的所有命令行选项
  • sudo apt-get install bundler
  • cd blog
  • bundle install
    //然后执行 bundle install 命令安装 Gemfile 中列出的 gem。
    //如果遇到sqlite3的版本问题,先apt-get install
    libsqlite3-dev,然后再bundle install试一试
    //gem install sqlite3-ruby
  • rails server

  wget
  mkdir -p /data/app_platform/ruby
  tar -zxvf ruby-2.0.0-p594.tar.gz
  cd ruby-2.0.0-p594
  ./configure –prefix=/data/app_platform/ruby
  make
  make install
  ln -sf /data/app_platform/ruby/bin/* /usr/bin/
  gem install rails
2.安装Nginx和Passenger
Passenger有两种方式安装,一种是standalone
方式即Passenger独立运行,然后通过Nginx将ruby相关请求转发到Passenger,另一种是与Nginx整合在一起安装,维护方便。这里选用第一种方式。
Passenger 4.0以上和Nginx 1.4以上可以整合到一起

  • 如何在CentOS/RHEL 7/6, Fedora 27/26上安装Ruby
    2.4
如果提示:

/home/ian/.rvm/gems/ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in
`autodetect’: Could not find a JavaScript runtime. See
for a list of available
runtimes.
(ExecJS::RuntimeUnavailable),这是因为缺少javascript的服务器解释引擎导致的,安装nodejs即可解决

  • sudo apt-get install nodejs
  • rails server
  • 在浏览器里打开http://localhost:3000,即可看见启动页面。
  • 解决问题,启动成功!
    图片 1
     

  wget

  wget
  useradd -r www -s /sbin/nologin
  mkdir -p /data/app_platform/{nginx,passenger}
  tar -zxvf passenger-4.0.57.tar.gz
  mv -f passenger-4.0.57/*  /data/app_platform/passenger
  tar -zxvf nginx-1.4.4.tar.gz
  cd nginx-1.4.4
  ./configure –user=www –group=www –prefix=/data/app_platform/nginx
–with-http_stub_status_module –with-http_ssl_module –with-pcre 
–with-http_perl_module –with-http_realip_module 
–with-http_addition_module 
–add-module=/data/app_platform/passenger/ext/nginx
  make
  make install         
  mkdir -p /data/app_platform/nginx/conf/conf.d/
 
3.配置Nginx

第1步 – 安装前提条件

首先,启用epel yum版本库并更新系统上的软件包。

$ sudo yum install -y epel-release yum-utils
$ sudo yum-config-manager --enable epel
$ sudo yum clean all && sudo yum update -y

接下来就是安装wireshark来进行抓包:

首先安装wireshark有两种方式,一种是通过ubuntu自带的应用商店安装,另外一种就是命令安装,在这里我推荐命令安装。

  • sudo apt-get install wireshark
  • sudo wireshark

结果显示错误:Lua: Error during loading:[string
“/usr/share/wireshark/init.lua”]:45: dofile has been
disabled,通过修改init.lua来解决问题。

  • sudo gedit /usr/share/wireshark/init.lua

将倒数第二行改为 –dofile(DATA_DIR..”console.lua”)

再次启动wireshark

  • sudo wireshark
    图片 2
     
打开Capture -> interfaces进行抓包设置,然后start  
![](https://www.linuxidc.com/upload/2016_07/160718154137173.png)  
 


到此,ROR的安装以及wireshark的安装成功:-)

Ubuntu下搭建Ruby On Rails
http://www.linuxidc.com/Linux/2012-06/61981.htm

实测 Ubuntu 13.10 上搭建 Ruby on Rails
http://www.linuxidc.com/Linux/2014-02/96399.htm

Ruby on Rails 4 Tutorial 中文版 高清完整PDF
http://www.linuxidc.com/Linux/2014-04/100253.htm

CentOS6.5使用Nginx+Passenger部署Ruby
on Rails环境 
http://www.linuxidc.com/Linux/2015-02/113294.htm

在Ubuntu 15.04中安装Ruby on Rails 
http://www.linuxidc.com/Linux/2015-07/119891.htm

更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133299.htm

图片 3

添加Nginx启动文件/etc/init.d/nginx
#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig:  – 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#              proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:    /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ “$NETWORKING” = “no” ] && exit 0
 
nginx=”/data/app_platform/nginx/sbin/nginx”
prog=$(basename $nginx)
 
sysconfig=”/etc/sysconfig/$prog”
lockfile=”/var/lock/subsys/nginx”
pidfile=”/data/app_data/nginx/logs/nginx.pid”
 
NGINX_CONF_FILE=”/data/app_platform/nginx/conf/nginx.conf”
 
[ -f $sysconfig ] && . $sysconfig
 
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $”Starting $prog: “
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $”Stopping $prog: “
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest_q || return 6
    stop
    start
}
 
reload() {
    configtest_q || return 6
    echo -n $”Reloading $prog: “
    killproc -p $pidfile $prog -HUP
    echo
}
 
configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}
 
configtest_q() {
    $nginx -t -q -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
# Upgrade the binary with no downtime.
upgrade() {
    local oldbin_pidfile=”${pidfile}.oldbin”
 
    configtest_q || return 6
    echo -n $”Upgrading $prog: “
    killproc -p $pidfile $prog -USR2
    retval=$?
    sleep 1
    if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then
        killproc -p $oldbin_pidfile $prog -QUIT
        success $”$prog online upgrade”
        echo 
        return 0
    else
        failure $”$prog online upgrade”
        echo
        return 1
    fi
}
 
# Tell nginx to reopen logs
reopen_logs() {
    configtest_q || return 6
    echo -n $”Reopening $prog logs: “
    killproc -p $pidfile $prog -USR1
    retval=$?
    echo
    return $retval
}
 
case “$1” in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest|reopen_logs)
        $1
        ;;
    force-reload|upgrade) 
        rh_status_q || exit 7
        upgrade
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    status|status_q)
        rh_$1
        ;;
    condrestart|try-restart)
        rh_status_q || exit 7
        restart
        ;;
    *)
        echo $”Usage: $0
{start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}”
        exit 2
esac

第2步 – 安装Nginx Passenger模块

现在在您的系统上安装rails和passenger gem。
执行以下命令来安装两个gem命令。

$ sudo yum install -y pygpgme curl

$ sudo curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo

现在使用以下命令将passenger安装在您的系统上。
另外,在您的系统上安装或更新Nginx。

$ sudo yum-config-manager --enable cr && sudo yum install -y nginx passenger

Nginx主配置文件/data/app_platform/nginx/conf/nginx.conf
user  www;
worker_processes  4;
 
error_log  /data/app_data/nginx/logs/error.log  error;
 
pid        /data/app_data/nginx/logs/nginx.pid;
 
worker_rlimit_nofile 65535;
 
events {
    use epoll;
    worker_connections  10240;
}
 
 
http {
    passenger_root /data/app_platform/passenger;
    passenger_ruby /usr/bin/ruby;
    passenger_max_pool_size 10;
    passenger_debug_log_file
/data/app_data/nginx/logs/passenger.log;
    passenger_show_version_in_header on;
    passenger_spawn_method smart;
   
    include      mime.types;
    default_type  application/octet-stream;
 
    log_format  main  ‘$remote_addr – $remote_user [$time_local]
“$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                      ‘”$http_user_agent”
“$http_x_forwarded_for”‘;
 
    access_log  logs/access.log  main;
 
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay    on;
    server_tokens off; 
 
    keepalive_timeout  60;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 1 128k;# 4 32k
    client_max_body_size 8m;
    client_body_buffer_size 128k;
 
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 60;
    fastcgi_read_timeout 60;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 4 512k;#8 128
    fastcgi_busy_buffers_size 512k;
    fastcgi_temp_file_write_size 512k;
    #fastcgi_intercept_errors on;
 
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    1 64k; #4 16
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types      text/plain application/x-javascript text/css
application/xml;
    gzip_vary on;
   
 
    include /data/app_platform/nginx/conf/conf.d/*.conf;
     
 
    server {
 
          listen      80        default;
          server_name _;
          return 403;
 
 
            }
}

第3步 – 启用Nginx Passenger模块

目前,您已经在您的系统上安装了Passenger和Apache服务器。
现在执行下面的命令为Apache安装passenger模块。
该命令将向您显示指导安装,并告诉您安装所有缺少的依赖关系。

$ vim /etc/nginx/conf.d/passenger.conf

passenger_root /usr/share/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/rvm/rubies/ruby-2.4.2/bin/ruby;
passenger_instance_registry_dir /var/run/passenger-instreg;

将为/usr/bin/ruby设置默认passenger_ruby。
我使用RVM将二进制路径更改为我们自定义安装的Ruby版本。

Nginx主配置文件关键部分就是这里,表明passenger是整合到Nginx中的。
    passenger_root /data/app_platform/passenger;
    passenger_ruby /usr/bin/ruby;
    passenger_max_pool_size 10;
    passenger_debug_log_file
/data/app_data/nginx/logs/passenger.log;
    passenger_show_version_in_header on;
    passenger_spawn_method smart;

第4步 – 配置Nginx 虚拟主机

让我们用Nginx配置文件中的VirtualHost配置域名。
示例虚拟主机配置如下所示。

   server {
        listen       80 default_server;
        server_name  example.com www.example.com;
        root         /var/www/html/public;
        passenger_enabled on;

   }

添加虚拟主机

第5步 – 重新启动Nginx服务

在Apache配置中添加上面的行后,使用以下命令重新启动Apache服务。

$ sudo systemctl restart nginx.service

恭喜! 您已经使用Nginx配置了Ruby on Rails应用程序。

CentOS6.5使用Nginx+Passenger部署Ruby on Rails环境 
http://www.linuxidc.com/Linux/2015-02/113294.htm

在Ubuntu 15.04中安装Ruby
on Rails 
http://www.linuxidc.com/Linux/2015-07/119891.htm

Ubuntu 14.04.4下搭建Ruby On Rails 
http://www.linuxidc.com/Linux/2016-07/133299.htm

Ruby中的遍历指定目录的文件方法
http://www.linuxidc.com/Linux/2015-01/111525.htm

Ruby on Rails 4 Tutorial 中文版 高清完整PDF
http://www.linuxidc.com/Linux/2014-04/100253.htm

Ruby 2.2 的增量垃圾收集机制
http://www.linuxidc.com/Linux/2015-06/119329.htm

在 Ubuntu 14.04 Server 上安装部署 Ruby on Rails 应用 
http://www.linuxidc.com/Linux/2017-11/148346.htm

Ubuntu14.04/16.04命令行快速安装Ruby和Rails运行环境 
http://www.linuxidc.com/Linux/2017-07/145554.htm

Ruby
的详细介绍
:请点这里
Ruby
的下载地址
:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149218.htm

图片 4

server {
 
    server_name xxx.com.cn; 
    access_log  /data/app_data/nginx/logs/xxx.log main;
 
    root /data/zmkm_app/zmkm/public/;
    passenger_enabled on;
 
    index index.html index.htm;
 
    location /assets/LiveVideo.swf {
 
        root /data/zmkm_app/zmkm/public/;
        index index.html index.htm;
        passenger_enabled on;
 
    }
 
}

需要注意的如果虚拟主机制定的目录下需要Nginx处理ruby代码则需要加上passenger_enabled
on;这条这令,并且location指定的内容还需要再次添加

CentOS 5.9上搭建Ruby on Rails 环��� 
http://www.linuxidc.com/Linux/2014-02/97340.htm

CentOS下配置Ruby on Rails并部署Redmine 
http://www.linuxidc.com/Linux/2014-09/106955.htm

CentOS系统搭建Ruby On Rails平台
http://www.linuxidc.com/Linux/2014-11/109590.htm

Ruby on Rails 和 Laravel: 入门 
http://www.linuxidc.com/Linux/2014-07/104431.htm

重要文章阅读:Ruby入门–Linux/Windows下的安装、代码开发及Rails实战
http://www.linuxidc.com/Linux/2014-04/100242.htm

Ruby on rails初体验系列文章:

http://www.linuxidc.com/Linux/2014-04/100245.htm
http://www.linuxidc.com/Linux/2014-04/100246.htm
http://www.linuxidc.com/Linux/2014-04/100247.htm

Ubuntu下搭建Ruby On
Rails
http://www.linuxidc.com/Linux/2012-06/61981.htm

实测 Ubuntu 13.10 上搭建 Ruby on Rails
http://www.linuxidc.com/Linux/2014-02/96399.htm

Ruby on Rails 4 Tutorial 中文版 高清完整PDF
http://www.linuxidc.com/Linux/2014-04/100253.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-02/113294.htm

图片 5