Deploy Rails App With Cloud Foundry
原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/03/23/deploy-rails-app-with-cloud-foundry/
这里直接拷贝过来的,就不在另外排版了。
Cloud Foundry是VMware于2011年4月12日推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
我去年刚听说Cloud Foundry的时候就试用了下,隔了有些日子了,今天重新去使用的时候遇到了一些问题,记录下。
vmc需事先安装好了ruby
1.安装vmc
gem install vmc
如果刚安装后出现”command not found: vmc”的情况
rbenv rehash
我这使用的是rbenv
2.与Cloud Foundry建立连接
vmc target api.cloudfoundry.com
3.登录cloud foundry
当然你已经注册好了Cloud Foundry的帐号,如果没有的话赶紧去Cloud Foundry去注册一个
vmc login
登录成功后就可以开始部署了.
4.部署rails应用
cloudfoundry上不支持sqlite3,如果你使用的还是sqlite3的话,可以在Gemfile这么修改下
Gemfile
# If you use a different database in development, hide it from Cloud Foundry.
group :development do
gem 'sqlite3'
end
# Rails 3.1 can use the latest mysql2 gem.
group :production do
gem 'mysql2'
end
配置信息处也需要修改下
config/environments/production.rb
config.serve_static_assets = true
Bundle your application:
bundle package
bundle install
Assets
rake assets:precompile
Deploy
vmc push --runtime ruby19
发布过程
Name> example # 设置应用的名称
Instances> 1
1: rails3
2: other
Framework> rails3
1: 64M
2: 128M
3: 256M
4: 512M
5: 1G
Memory Limit> 256M
Creating example... OK
1: example.cloudfoundry.com
2: none
Domain> example.cloudfoundry.com
Updating example... OK
Create services for application?> y
1: mongodb 2.0
2: mysql 5.1
3: postgresql 9.0
4: rabbitmq 2.4
5: redis 2.2
6: redis 2.4
7: redis 2.6
What kind?> 2
Name?> example_datebase # 设置数据库名称
Creating service example_datebase... OK
Binding example_datebase to example... OK
Create another service?> n
Bind other services to application?> n
Save configuration?> y
Saving to manifest.yml... OK
Uploading example... OK
Starting example... OK
Checking example...
0/1 instances: 1 starting
0/1 instances: 1 down
0/1 instances: 1 down
0/1 instances: 1 flapping
Application failed to start.
这里解释下,vmc push后会产生一个manifest.yml的文件,刚才所有的设置都会记录在其中。
很明显这里应用没有启动成功,那问题处在哪里呢?
首先我查看下应用的状态
vmc apps
Getting applications... OK
name status usage runtime url
example 0% 1 x 256M ruby19 example.cloudfoundry.com
vmc services
Getting services... OK
name service version
example_datebase mysql 5.1
这里我们可以看到数据库和应用都是正确的,只是在启动的时候发生的意外。这时我们可以直接查看下日志
vmc logs example
Using manifest file manifest.yml
Getting logs for example #0... OK
Reading logs/migration.log... OK
/var/vcap/data/dea/apps/example-0-db496108f915e5d9ec906e10a6ee9f12/app/rubygems/ruby/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb:801:in `rescue in load_spec_files': git://github.com/nadarei/mina.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)
from /var/vcap/data/dea/apps/example-0-db496108f915e5d9ec906e10a6ee9f12/app/rubygems/ruby/1.9.1/gems/bundler-1.2.1/lib/bundler/source.rb:799:in `load_spec_files'
...........
这里我们可以发现是mina造成的bundle的错误,修改一下相应的错误后重新发布
vmc push
Using manifest file manifest.yml
Uploading example... OK
Stopping example... OK
Starting example... OK
Checking example...
0/1 instances: 1 starting
0/1 instances: 1 starting
0/1 instances: 1 starting
1/1 instances: 1 running
OK
这次很顺利没有再出现问题,它直接调用manifest.yml保存的部署设置。访问下example.cloudfoundry.com就可以直接看到你刚部署的应用。
5.vmc其他命令
vmc help
vmc update [APP]
vmc stop [APP]
vmc start [APP]
vmc restart [APP]
vmc delete [APP]
vmc logs [APP]
vmc instances [APP] # 列出你有的instances
vmc scale [APP] # 更新应用的instances/memory limit
原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/03/23/deploy-rails-app-with-cloud-foundry/