欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

nginx+unicorn部署ruby web环境

程序员文章站 2022-05-16 09:23:53
...
最近接手了一个ruby的web项目,由于之前没有接触过ruby以及相关的web开发,而且项目当中文档缺失,所以在部署该项目的时候很是走了一些弯路最后参照多篇ruby on rails的开发环境部署,以及学习了下ruby当中的gem/bundler等的关系,成功部署项目。在这儿记一下,算是一个小的总结,也可以对ruby web开发刚入门部署环境时提供一个参照。
我们的项目是基于padrino,如果是基于rails的项目,部署应该也是差不多的。

1.安装ruby

由于系统中可能有多个ruby相关的项目,而不同的项目可能需要针对不同的ruby版本进行开发或者测试,所以系统当中可能需要安装多个ruby的版本。而这就需要相应的工具来管理已有版本和安装新版本。我这儿选用的是rbenv,也可以使用老牌的rvm。
安装rbenv
git clone git://github.com/sstephenson/rbenv.git  ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
添加ruby-build组件
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
添加gem-rehash组件
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
安装ruby(以ruby2.1.5为例)
由于默认安装ruby会比较慢,所以此处先从ruby.taobao.org下载相应的文件,然后使用本地安装的方式来安装
wget -O ~/.rbenv/versions/ruby-2.1.5.tar.gz http://ruby.taobao.org/mirrors/ruby/2.1/ruby-2.1.5.tar.gz
env RUBY_BUILD_MIRROR_URL=file:///home/ziven/.rbenv/versions/ruby-2.1.5.tar.gz# ~/.rbenv/bin/rbenv install 2.1.5
其中wget是下载相应的ruby文件,这里是ruby-2.1.5.tar.gz
RUBY_BUILD_MIRROR_URL
用来指定安装的ruby镜像路径,这里直接使用本地路径。注意本地路径后面应该加上#来结尾
rbenv install命令后面的版本应该跟要安装的ruby版本对应,例如可能安装的版本是带有相应的补丁编号的(例如: 1.9.3-p223),此处也应该写上。

2. 安装必要组件

因为我们一般采用bundler来管理项目需要的gems,所以此处是需要安装bundler的。
考虑到国内连接ruby镜像的速度,我们更换gem源为taobao源。
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
之后执行gem sources -l应该只有https://ruby.taobao.org/这一个源
安装bundler
gem install bundler

3.应用部署

a. clone web源码到合适位置

这里假设clone之后的源码放置到/opt/projectA

b.安装依赖的gems

在项目的根目录执行:
bundle install
此处需要注意,根据不同的情况执行的命令可能略有差异。例如在生产环境部署时,可能需要执行
bundle install --deployment --without development test
这样部署时,相关的依赖gems被安装到 projectA/vendor/bundle下面。尤其适合不同的项目依赖同一个gem的不同版本的时候使用。

c.数据库相关迁移

由于本项目是基于padrino所以需要执行:
padrino rake --envir db:migrate
需要注意的是,此处视情况可能需要使用bundle来执行该命令:
bundle exec padrino rake --envir db:migrate
数据库迁移成功后,需要创建amdin账户。padrino默认在db/seeds.rb当中完成admin账户的创建。所以此处执行:
bundle exec padrino rake --envir seed
执行过程当中会提示输入admin账户的邮箱跟密码

d.unicorn部署

此处可能需要相应的unicorn启动脚本,可以参照ruby-china的unicorn.rb来写。此处从略。
启动unicorn server:
bundle exec unicorn -E production -c unicorn.rb -D
这样padrino server就已经正常启动了。如果unicorn.rb当中监听的是tcp端口,那么此时访问相应的url应该可以打开了。如果是采用的监听unix socket的方式,那么还应该使用nginx(或者apache)来做反向代理。

4. nginx的安装配置

a. nginx的安装

nginx就是可以安装linux一般软件的安装方式来安装。推荐使用源码安装方式。此处简略起见,暂以包管理器的安装方式进行安装:
sudo apt-get install nginx-full

b. nginx的配置

	upstream myserver {
	  server unix:/tmp/projectA.sock fail_timeout=0;
	}
	
	server {
	    listen       7788;
	    server_name  localhost;
	
	    client_max_body_size 10M;
	
	    error_page   500 502 503 504  /50x.html;
	    location = /50x.html {
	        root   /usr/share/nginx/html;
	    }
	
	    root /opt/projectA/web/public;
	
	    try_files $uri $uri.html @app;
	
	    location @app {
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header Host $http_host;
	        proxy_redirect off;
	        proxy_pass http://myserver;
	    }
	}

此处将7788端口的请求转发到
unix:/tmp/projectA.sock
进行处理。也即转发到刚刚我们的web服务器处理。
至此,server已经可以正常运行。其他的一些辅助功能可以根据需要进行添加。例如nginx可能需要ssl证书来认证。
ruby on rails项目的部署大同小异,其部署过程当中可能在执行相应的命令时需要根据情况做相应的调整。不过只要熟悉了ruby web的部署方式,其他的可以参照相关框架的文档还是比较容易部署的。

以上就介绍了nginx+unicorn部署ruby web环境,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。