最近接手了一个ruby的web项目,由于之前没有接触过ruby以及相关的web开发,而且项目当中文档缺失,所以在部署该项目的时候很是走了一些弯路。最后参照多篇ruby on rails的开发环境部署,以及学习了下ruby当中的gem/bundler等的关系,成功部署项目。在这儿记一下,算是一个小的总结,也可以对ruby web开发刚入门部署环境时提供一个参照。
我们的项目是基于padrino,如果是基于rails的项目,部署应该也是差不多的。
1.安装ruby
由于系统中可能有多个ruby相关的项目,而不同的项目可能需要针对不同的ruby版本进行开发或者测试,所以系统当中可能需要安装多个ruby的版本。而这就需要相应的工具来管理已有版本和安装新版本。我这儿选用的是rbenv,也可以使用老牌的rvm。git clone git://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec $SHELL
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
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
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
RUBY_BUILD_MIRROR_URL
2. 安装必要组件
因为我们一般采用bundler来管理项目需要的gems,所以此处是需要安装bundler的。gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/
gem install bundler
3.应用部署
a. clone web源码到合适位置
这里假设clone之后的源码放置到/opt/projectAb.安装依赖的gems
在项目的根目录执行:bundle install
bundle install --deployment --without development test
c.数据库相关迁移
由于本项目是基于padrino所以需要执行:padrino rake --envir db:migrate
bundle exec padrino rake --envir db:migrate
bundle exec padrino rake --envir seed
d.unicorn部署
此处可能需要相应的unicorn启动脚本,可以参照ruby-china的unicorn.rb来写。此处从略。bundle exec unicorn -E production -c unicorn.rb -D
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; } }
unix:/tmp/projectA.sock
以上就介绍了nginx+unicorn部署ruby web环境,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。