rails 部署 nginx + passenger
转自 http://segmentfault.com/a/1190000002911605
https://ruby-china.org/topics/16245
运行 RAILS_ENV=production bundle exec rake assets:precompile
使用passenger在Centos7部署nginx+Ruby on Rails
- 1 推荐
- 4 收藏,929 浏览
passenger
passenger是一个能快速搭建web环境的工具,它能快速的将nginx和passenger部署到你的服务器中,是部署ruby环境就如同php环境那样简单快速,让人愉悦。下面我将使用这个工具将一个几乎空白的web服务器打造成一个高效的ruby服务器
centos7
centos7是最新的centos版本带来了一系列新特性,包括对Docker的支持和性能的提高,centos 6和 centos 7性能对比
安装ruby环境
首先下载rvm(ruby虚拟机)
curl -L get.rvm.io | bash -s stable
安装rvm
source /etc/profile.d/rvm.sh
安装ruby(请选择官网上最新的版本,使用ruby就要一直坚定的使用其最新版本)
rvm install 2.2.1
安装完成后只要运行ruby -v有显示版本号就证明已经安装成功了
安装Passenger 和 Nginx
首先使用gem安装passenger
gem install passenger
由于nginx不支持动态的模块载入,所以要使用passenger来进行编译安装由passenger修改过的nginx
接下来安装nginx+passenger
passenger-install-nginx-module
运行了这个命令后,按照提示一步步安装
1.Yes: download, compile and install Nginx for me. (recommended)
The easiest way to get started. A stock Nginx 1.0.10 with Passenger
support, but with no other additional third party modules, will be
installed for you to a directory of your choice.
2.No: I want to customize my Nginx installation. (for advanced users)
Choose this if you want to compile Nginx with more third party modules
besides Passenger, or if you need to pass additional options to Nginx's
'configure' script. This installer will 1) ask you for the location of
the Nginx source code, 2) run the 'configure' script according to your
instructions, and 3) run 'make install'.
Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.
Enter your choice (1 or 2) or press Ctrl-C to abort:
当遇到这个选择时,建议选择1,1代表自动完整安装并配置nginx,2是代表根据自己需求定制nginx.
安装完成后系统会提示,nginx安装的目录,在centos7下默认是安装在/opt/nginx下,配置文件是默认在/opt/nginx/conf/nginx.conf
打开nginx.conf我们可以看到,passenger已经在nginx的配置文件上做了一点小配置
passenger_root /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.10;
passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;
安装rails并初始化一个rails项目
使用gem安装rails
gem install rails
初始化一个rails项目
rails new sample_app
第一次初始化rails时一般会报出缺少gem的警告,此时只需要将rails的镜像改为淘宝镜像,详见http://ruby.taobao.org,然后执行
bundle install
当执行完毕后,一个rails项目的初始化就完成了
配置nginx
打开配置文件
vim /opt/nginx/conf/nginx.conf
这里给出一份最简单能运行的nginx.conf(注意:rails项目的目录是/opt/www)
{
worker_processes 1;
events {
worker_connections 1024;
}
http {
passenger_root /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.10;
passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
#监听的端口
listen 8080;
server_name 127.0.0.1;
#web根目录,一定是rails项目下的public
root /var/www/sample_app/public/;
#一定要记得将这个选项设置为on
passenger_enabled on;
}
}
运行
sbin/nginx -t
如果没有报错,那说明配置成功了。那么已经万事大吉了吗?并没有!!
配置Centos7防火墙
Centos7后已经废弃了原来的iptables,改而使用firewall,默认情况下centos7系统不允许任何外来访问,就算你把firewall关了也没用,所以必须配置firewall
firewall-cmd --zone=public --add-port=8080/tcp --permanent
这个命令表示,允许外部访问8080端口,重载一下firewall的配置,就外部就能访问服务器的8080端口了
配置Rails的生产环境
配置完Centos7的防火墙后,访问rails程序时就会报出一个403的forbidden错误,仔细查看日志后,发现了问题了的原因
App 6361 stderr: [ 2015-06-16 11:27:24.1412 6376/0x00000001d35760(Worker 1) utils.rb:85 ]: *** Exception RuntimeError in Rack application object (Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`) (process 6376, thread 0x00000001d35760(Worker 1)):
这个错误表示Rails生产环境下的密钥没有配置。在nginx上跑rails一般只有在生产环境下才会使用,因而passenger默认下就是rails环境设置为生产环境,而rails初始化时默认没有对生产环境进行密钥配置。这时就需要我们自己去配置rails的密钥了
在rails的Gemfile中加入
gem 'dotenv-rails'
然后运行
bundle install
安装完这个gem后就可以配置我们的生产环境密钥了
首先在sample_app目录下建立一个.env文件
然后运行
rake secret
这个命令会随机生成一个安全密钥,将这个密钥复制下来,然后在.env中添加
SECRET_KEY_BASE = 你的密钥
最后修改sample_app目录下的config/secrets.yml
development:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
test:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
这样一来密钥配置就完成了,重启nginx就能成功访问到rails项目了
你可能感兴趣的文章
- Passenger + Nginx + Rails 生产环境配置
1 收藏,1.1k 浏览
- Ruby On Rails 在Debian上部署
1 收藏,1.7k 浏览
- RVM 实用指南
769 浏览
讨论区
rails 部署 nginx + passenger的更多相关文章
- nginx中error_page没有生效(nginx+passenger+rails)
应用部署方式为 nginx + passenger + rails 当我想要用nginx来默认处理400以上状态时,发现在rails返回respose之后,nginx不会再次执行error_page( ...
- Rails、Nginx、Passenger、bundle之间的协作关系
引自:http://www.zhihu.com/question/20062163 Bundle是Gem包的依赖管理工具,RubyGem本身有依赖管理为何还要Bundle呢?有时候两个gem虽然都依赖 ...
- debian完整部署 Nginx + uWSGI + Django
手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...
- debian7下部署nginx服务器
笔者是在vmware中的Debian7下部署nginx服务器,采用离线部署方式.过程如下: 1.准备好需要的离线安装包 nginx-1.6.2.tar.gz,pcre-8.34.tar.gz,open ...
- 在Docker下部署Nginx
在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...
- 自动部署Nginx和nfs并架设Nginx集群脚本
本人经过多次尝试,简单完成了自动部署Nginx和nfs脚本,并且能够自动部署web反向代理集群,下面详细的阐述一下本人的思路.(以下脚本本人处于初学阶段,写的并不是很完善,所以需要后期进行整理和修正, ...
- Linux中以单容器部署Nginx+ASP.NET Core
引言 正如前文提到的,强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程. Ng ...
- Windows Server 2008 R2 Enterprise x64 部署 nginx、tomcat、mysql
部署nginx nginx主要做反向代理用,可以单独部署到其它机器上,这里nginx和tomcat部署在同一台机器上. 下载nginx-1.14.1.zip,并解压到目标目录,打开cmd进入到解压后的 ...
- windows10下面部署nginx(解决文件名中文乱码问题)
由于开发需要,我们总是需要先在windows环境下面部署项目进行测试,通过之后才会移植到linux系统进行测试部署. 本篇文章会介绍一下windows终端下面部署nginx WEB服务的一些步骤流程, ...
随机推荐
- CF1109A Sasha and a Bit of Relax
CF1109A Sasha and a Bit of Relax 用 \(xorsum[l,r]\) 表示 \(a[l] \oplus a[l+1] \oplus a[l+2]... a[r-1] \ ...
- IIS并发瓶颈线程数的限制
.NET线程池最大线程数的限制-记一次IIS并发瓶颈 https://www.cnblogs.com/7rhythm/p/9964543.html .NET ThreadPool 最大线程数的限制 I ...
- 剑指offer第五章
剑指offer第五章 1.数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组 ...
- WinForm窗体继承自定义的模板窗体出错
在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.而今天自定义一个窗体,然后子窗体继承的时候出现了一点问题. 问题: 在 ...
- ballerina 学习一 基本项目安装试用
ballerina介绍 建议参考这篇文章: https://mp.weixin.qq.com/s/DqdlOhquqMaGOJf26lANPw 1. 安装 直接下载对应操作系统的二进制文件即 ...
- apiman 安装&&使用
安装测试基于docker 1. docker image pull docker pull apiman/on-wildfly1 2. 启动 docker run -d -p 8081: ...
- new与malloc的区别,以及内存分配浅析
从函数声明上可以看出.malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小.比如: 1 2 3 int *p; p = new int; //返回类型 ...
- Excel if函数无法正确对比大小
我想完成以下操作 1.提取A列数字的第7-11位的数字 2.若此数字大于1993 3.则返回20,不然返回0 于是我在B和C列上写了两个函数,分别是 MID(A1,7,4) IF(B ...
- 在Windows下搭建基于nginx的视频直播和点播系统
http://my.oschina.net/gaga/blog/478480 一.软件准备 由于nginx原生是为linux服务的,因此官方并没有编译好的windows版本可以下载,要在windows ...
- Hibernate学习5—Hibernate操作对象2
第二节:Session 常用方法讲解 2)load和get()方法: 数据库中不存在与OID 对应的记录,Load()方法会抛出异常: load方法默认采用延迟加载,load出来的对象是一个代理类.开 ...