~ read.

Ruby on Rails 初体验 - 之 - RubyChina程序部署

写在前面

其实很早很早就听说了Ruby和Ruby on Rails,被很多人称为最适合Web开发的语言框架。早前在本地实验了下Ruby on Rails的大致部署同时熟悉了下框架中的各部分以及如何写一个最最简单额Ruby on Rails网站。

Ruby China一直是国内最火的Ruby on Rails (后续称之为 RoR)论坛,他们的系统也是用Ruby on Rails开发的,看起来非常不错,而且是开源的,这次乘着DigitalOcean (后面称之为 DO)说是一年内要把所有Promo送的钱用完,开了一个DO主机然后开始练习下Ruby China的部署。后面再慢慢从源码研究具体的开发。

不过说来也奇怪,官方文件除了Github上面的一个简单的说明以外没有找到任何部署的详细说明,网上搜了半天也没有,只能自己琢磨然后慢慢搞了

环境配置

还是一样我用的是最熟悉的Ubuntu系统,Ruby China的Github页面上写明了需要什么环境,但是却偏偏没有具体安装过程,我这里就简单说一下,除了Ruby以外基本上版本在Ubuntu官方源里面都有,所以直接apt-get安装了:

$ sudo apt-get update
$ sudo apt-get install git curl mongodb imagemagick memcached redis-server

这样基本上就安装好了Ruby China所需要的环境

然后还需要安装Ruby,当然。Ubuntu里面的Ruby版本看起来是1.9.1左右的版本,用不了,所以用Ruby China Github Wiki中提到的办法是用RVM安装

首先安装RVM

\curl -sSL https://get.rvm.io | bash 
## 你可能还需要 source 一下 按照提示来

然后使用rvm安装ruby 2.1.3

rvm use --install --default 2.1.3

基本上就安装好了

安装部署

因为具体的没有教程,但是根据接触过其他的(例如Node.JS)的来说需要一个程序来运行Ruby程序,然后再通过Nginx/Apache来访问,官方WIKI中提供的是Passenger+Nginx的教程,我就按照这个来。虽然Ruby China已经跑在其他的什么程序上面了

以下代码摘抄自官方WIKI:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo echo "deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main" > /etc/apt/sources.list.d/passenger.list
$ sudo apt-get update

前面步骤主要是添加了Passenger的官方Key和官方源,进行了update等操作,后面安装Passenger

$ sudo apt-get install nginx-extras passenger

现在修改 nginx 配置,编辑 /etc/nginx/nginx.conf,找到这两行注释:

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

将它修改为:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/deploy/.rvm/wrappers/default/ruby;

然后就大功告成了~

程序安装

其实分标题写的不太好,大家按照顺序看下来就好了。上面完成了所有环境方面的安装,然后下面是正式安装Ruby China的程序了

在这里还需要注意一个,需要使用一个特别的账户来运行程序而不是使用root,具体添加账户的办法很多就不重复说明了

创建一个文件夹并且给他新创建的用户的权限

$ sudo mkdir -p /var/www/
$ sudo chown www:www /var/www/

然后从Github下载Ruby China源代码进行安装

git clone git://github.com/ruby-china/ruby-china.git
cd ruby-china
./bin/setup

这里可能会跑一段时间,因为我发现Ruby China用的是淘宝的源,可能是因为这样国内部署会容易一些吧。./bin/setup 会检查依赖环境并且跑完所有依赖包,然后就告诉你安装成功了。

安装成功之后还需要进行一些数据库创建和模板创建的问题

执行 bundle 和 migrate:
更新:后来发现这部分应该在Setup的时候已经做好了所以不需要重复去做了

$ bundle install
$ RAILS_ENV=production rake db:create db:migrate

执行 assets precompile:
更新:如果出现Style无法Load的话需要使用,如果没有就不需要了

$ rake assets:precompile

最后的最后,你只需要配置一下你的Nginx让他指向你的网站目录,就可以了。

编辑 /etc/nginx/sites-enabled/default,写入以下内容:

server {
	listen 80 default;
	server_name example.com; # 这里填写你真实域名
	root /var/www/example.com/current/public;
	passenger_enabled on;
}

然后重启Nginx

$ sudo service nginx restart

问题说明

这里我遇到了几个问题,下面依次说明一下

  • 安装Passenger的时候可能会遇到问题,这时候可以通过gem安装

    $ gem install passenger
    

然后使用passenger安装nginx
$ rvmsudo passenger-install-nginx-module

  • 在Setup的时候可能需要修改Gemfile更新最给力的源
    例如直接使用rubygem.org官方源

  • 在Setup的时候如果不是使用root账户可能会有写入权限问题,这个需要注意下

  • 在使用Passenger和Nginx的时候你可能需要使用$ rails s -e production来启动你的RoR服务器。

  • 同时Nginx里面的配置可能会有出入,可以参考一个 教程

  • Nginx的配置可能不需要Location的部分,如果有错误可以试着搜索一下处理方法调整一下

写在后面

AGAIN!!~ 我还是新手,这算是我的一个安装笔记,慢慢自己摸索,各种查教程摸索出来的,如果有问题还请指教,请轻喷。至少按照大致上这个顺序搞定了Ruby China的程序,已经可以跑起来了

另外,一定不要忘记启动Passenger哦~

comments powered by Disqus