本篇文档帮助您将基于Rails3.x的应用快速部署到好雨云平台。Sinatra 或其他类型的Ruby应用请参考:**语言支持**。
### 本地环境设置
#### **基础环境**
本文使用 Ubuntu 14.04.2 LTS 系统,root用户操作,Rails 使用3.2.3版本
* 本地安装git命令行或者git的GUI软件
~~~
$ apt-get update
$ apt-get install git
~~~
* 安装 Ruby 2.0.0
~~~
$ cd /tmp/ && mkdir soft && cd soft
$ wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p645.tar.gz
$ tar xvzf ruby-2.0.0-p645.tar.gz
$ cd ruby-2.0.0-p645
$ ./configure --prefix=/usr/local/ruby
$ make && make install
$ export PATH=$PATH:/usr/local/ruby/bin/
$ echo 'export PATH=$PATH:/usr/local/ruby/bin/' >> ~/.bashrc
$ ruby -v
ruby 2.0.0p645 (2015-04-13 revision 50299) [x86_64-linux]
# 设置淘宝gem源
$ gem source list
*** CURRENT SOURCES ***
https://rubygems.org/
$ gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
$ gem sources -a https://ruby.taobao.org/
https://ruby.taobao.org/ added to sources
$ gem source -l
*** CURRENT SOURCES ***
https://ruby.taobao.org/
~~~
* 安装 Rails 3.2.3
~~~
$ gem install rails -v 3.2.3
$ rails -v
Rails 3.2.3
# 安装bundle
gem install bundle
~~~
### 创建应用
#### **创建新应用**
~~~
$ mkdir -pv /app/ && cd /app/
$ rails new myapp --database=mysql
# 修改Gemfile,将源替换为taobao地址
$ sed -i s'#rubygems.org#ruby.taobao.org/#g' Gemfile
# 重新生成Gemfile.lock文件
$ bundle install
~~~
#### **使用已有应用**
如果使用现有的应用,请确认使用mysql数据库。
~~~
$ grep mysql2 Gemfile
~~~
如果没有mysql2标示,请添加:
~~~
$ echo "gem 'mysql2'" >> Gemfile
# 重新生成 Gemfile.lock文件
$ bundle install
~~~
#### **数据库配置**
当应用部署到好雨云平台时数据库的配置建议使用环境变量的形式,这样可以避免敏感信息泄露,同时又保证了配置的灵活性,下面是一个实例:
**config/database.yml**
~~~
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_development
pool: 5
username: root
password:
host: localhost
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_test
pool: 5
username: root
password:
host: localhost
production:
adapter: mysql2
encoding: utf8
reconnect: true
pool: 5
host: <%= ENV['MYSQL_HOST'] %>
port: <%= ENV['MYSQL_PORT'] %>
database: myapp
username: <%= ENV['MYSQL_USER'] %>
password: <%= ENV['MYSQL_PASSWORD'] %>
~~~
**注意**
* development、test 环境的数据库配置请根据本地实际情况填写
* production 的MYSQL_开头的环境变量是在好雨云平台关联mysql服务后自动生成的。
* production 的数据库需要提前创建
#### **Rails 插件**
为了Rails应用能够在好雨云平台工作得更好,建议添加rails_12factor gem 修改 Gemfile文件添加如下内容:
~~~
$ echo "gem 'rails_12factor', group: :production" >> Gemfile
# 更新依赖文件
$ bundle install
~~~
#### **设置 Asset Pipeline**
从Rails 3.1版本开始引入了Asset Pipeline 的概念,其提供了一个框架,用于连接、压缩 JavaScript 和 CSS 文件。还允许使用其他语言和预处理器编写 JavaScript 和 CSS,例如 CoffeeScript、Sass 和 ERB。
我们建议用户本地生成线上环境的静态资源,这样可以加快线上部署的时间,下面介绍本地操作方法
~~~
RAILS_ENV=production bundle exec rake assets:precompile
/usr/local/ruby/bin/ruby /usr/local/ruby/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
Compiled application.js (0ms) (pid 1601)
Compiled application.css (0ms) (pid 1601)
Compiled application.js (0ms) (pid 1601)
Compiled application.css (0ms) (pid 1601)
~~~
**注意**
>#####如果执行bundle exec rake assets:precompile 有如下报错:
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes
只需要将Gemfile文件中 # gem 'therubyracer', :platform => :ruby 的注释去掉即可,然后执行 bundle install 安装gem并更新依赖文件
RAILS_ENV=production bundle exec rake assets:precompile 这条命令设置了RAILS_ENV环境变量为production,是因为部署在云平台上的应用会自动设置RAILS_ENV= production
为了告知云平台不在构建过程中生成 Asset,需要在config/application.rb配置文件中添加如下配置:
~~~
config.assets.initialize_on_precompile = false
~~~
#### **指定Ruby版本**
为了保证线下和线上的ruby版本一直,可以将ruby的版本要求写在Gemfile文件中,这样当程序在云平台部署时就会按照我们的要求安装指定版本的ruby
~~~
$ echo "ruby '2.0.0'" >> Gemfile
# 重新生成依赖文件
$ bundle install
~~~
点击Ruby语言概述查看云平台支持的ruby版本
配置运行方式
默认情况下,rails在平台使用webrick作为web服务器,但webrick只是为开发环境使用的,问题参见:rails默认web server。我们建议使用Puma作为web服务器,可以参考 使用Puma 部署 Rails 应用 文档,下面介绍使用puma的方法:
1、安装puma
~~~
echo "gem 'puma'" >> Gemfile
#安装puma
bundle install
~~~
1、配置puma
~~~
touch config/puma.rb
vi config/puma.rb
~~~
将下面部分粘贴到config/puma.rb 文件中
~~~
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
# 若程序不是线程安全的需要将threads_count设置为1
# threads_count = 1
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Valid on Rails up to 4.1 the initializer method of setting `pool` size
ActiveSupport.on_load(:active_record) do
config = ActiveRecord::Base.configurations[Rails.env] ||
Rails.application.config.database_configuration[Rails.env]
config['pool'] = ENV['MAX_THREADS'] || 5
ActiveRecord::Base.establish_connection(config)
end
end
~~~
#### **编写Procfile文件**
~~~
echo "web: bundle exec puma -C config/puma.rb" > ./Procfile
~~~
### **将应用部署到好雨云平台**
#### **创建应用**
操作方法参见:新建应用
#### **提交代码**
创建应用的最后一步会给出应用的git代码仓库地址,提交用户名是好雨登陆邮箱,密码为平台登陆密码。
命令行下提交代码的命令:
~~~
$ cd /app/myapp
$ git init
$ git add .
# 设置git提交信息,这里根据用户实际情况填写
$ git config --global user.email "demo@goodrain.com"
$ git config --global user.name "demo"
$ git commit -m "init"
$ git remote add origin http://code.goodrain.com/app/团队名_应用名.git
# git push origin master
Username for 'http://code.goodrain.com': 平台登陆邮箱地址
Password for 'http://zyq916@gmail.com@code.goodrain.com': 平台登陆密码
Counting objects: 68, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (52/52), done.
Writing objects: 100% (68/68), 82.08 KiB | 0 bytes/s, done.
Total 68 (delta 2), reused 0 (delta 0)
To http://code.goodrain.com/app/团队名_应用名.git
* [new branch] master -> master
~~~
#### **一键部署**
操作方法参见: 应用详情-一键部署
#### **查看日志**
部署或运行中的状态、错误信息都可以在日志中动态查看,操作方法参见:查看日志
#### **访问应用**
部署并启动成功后可以直接通过应用概览页的 “访问” 按钮打开应用
- 介绍
- 从这里开始
- 注册
- 登陆
- 云帮界面
- 功能介绍
- 新增应用
- 从镜像
- 从源码
- 应用市场
- 应用框架
- 我的应用
- 界面介绍
- 应用控制台
- 概览
- 依赖
- 监控
- 日志
- 设置
- 费用
- 端口
- 存储
- 扩容
- 总览
- 团队
- 财务中心
- 帐户充值
- 应用扣费
- 批量续费
- 语言支持
- 概述
- Java
- java-maven
- java-war
- java-jar
- web程序部署
- 使用Webapp Runner部署
- 使用Jetty Runner部署
- 示例代码
- gradle
- Scala
- play
- Ruby
- 语言支持
- ruby应用部署
- Rails 应用概述
- 部署Rails3.x应用
- 使用Puma 部署 Rails 应用
- 示例代码
- Python
- 语言支持
- Web框架支持
- 示例代码
- PHP
- 平台特性
- 语言支持
- 运行环境设置与调优
- 部署ThinkPHP框架程序
- 示例代码
- Go
- 语言支持
- 部署Beego等框架程序
- 示例代码
- Node.JS
- 语言支持
- 示例代码
- Html
- 语言支持
- 示例代码
- Dockerfile
- 语言支持
- 示例代码
- 相关文档
- Procfile
- Cron计划任务
- 参考知识
- 好雨Gogs使用说明
- Artifactory对接本地仓库
- 好雨如何对接Git Server
- Git使用技巧
- 服务框架支持
- dubbo
- springcloud
- 技术支持