CloudFoundry 学习之 warden 的安装

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/restkuan/article/details/8070066
warden -- 资源隔离和管理。下面我将简单说一下,如何从头开始安装。
本文假设你对 Ruby 不熟悉!
首先请安装 ruby, 推荐使用 rvm ...
建议安装教程:https://rvm.io/rvm/install/ 请耐心点自己阅读,并安装。(因为种种原因,不保证能成功) -- PS: 你也可以网上找中文教程,能成功就行。ruby 1.9.2 & 1.9.3 差别不大,都可安装。
安装 bundle, 运行 gem install bundler
=== ==== ====
好了,刚才是准备工作,现在开始安装 warden
1.  git clone git://github.com/cloudfoundry/warden.git
2. 进入 warden 的子目录 warden (名字相同,别奇怪,有 Gemfile 文件的这目录)
3. 执行  bundle
4. 按照README, 执行 
sudo apt-get install -y linux-image-generic-lts-backport-natty
sudo apt-get install -y build-essential debootstrap
5. 设置 warden, 执行(这一步可简写 rake setup[config/linux.yml] ,不成功再用下面的)
sudo bundle exec rake setup[config/linux.yml]
这一步,请特别注意最后的输出应该和这差不多。
Setting up build-essential (11.4build1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
在这之后,你可以在 /tmp/warden 目录下找到 [containers  和 rootfs],前者为空,后者为刚才安装过程中生成的虚拟机
6. 执行(这一步可简写 rake warden:start[config/linux.yml] ,不成功再用下面的)
sudo bundle exec rake warden:start[config/linux.yml]
b/warden/container/spawn.rb","lineno":121,"method":"set_deferred_success"}
{"timestamp":1350281577.2832768,"message":"Listening on /tmp/warden.sock, and ready for action.","log_level":"info","source":"Warden::Server","data":{},"thread_id":15005340,"fiber_id":23490560,"process_id":23434,"file":"/root/warden/warden/lib/warden/server.rb","lineno":277,"method":"block (2 levels) in run!"} 结果,这不是错误!
但这里有个坑,普遍存在,请看:
root@ubuntu-03:/home/wardener/warden/warden# rake warden:start[config/linux.yml]
{"timestamp":1349851024.4173303,"message":"rlimit_nofile: 1024 => 32768","log_level":"debug","source":"Warden::Server","data":{},"thread_id":14814280,"fiber_id":24325740,"process_id":12823,"file":"/home/wardener/warden/warden/lib/warden/server.rb","lineno":238,"method":"run!"}
{"timestamp":1349851024.4284155,"message":"Exited with status 1 (0.007s): [[\"/home/wardener/warden/warden/root/linux/setup.sh\", \"/home/wardener/warden/warden/root/linux/setup.sh\"]]","log_level":"warn","source":"Warden::Container::Spawn::DeferredChild","data":{},"thread_id":14814280,"fiber_id":24325740,"process_id":12823,"file":"/home/wardener/warden/warden/lib/warden/container/spawn.rb","lineno":117,"method":"set_deferred_success"}
{"timestamp":1349851024.4286866,"message":"Stdout: /sys/fs/cgroup does not exist...\n","log_level":"warn","source":"Warden::Container::Spawn::DeferredChild","data":{},"thread_id":14814280,"fiber_id":24325740,"process_id":12823,"file":"/home/wardener/warden/warden/lib/warden/container/spawn.rb","lineno":118,"method":"set_deferred_success"}
{"timestamp":1349851024.4290073,"message":"Stderr: ","log_level":"warn","source":"Warden::Container::Spawn::DeferredChild","data":{},"thread_id":14814280,"fiber_id":24325740,"process_id":12823,"file":"/home/wardener/warden/warden/lib/warden/container/spawn.rb","lineno":119,"method":"set_deferred_success"}
rake aborted!
command exited with failure
出错! .. .. 运行到这https://github.com/cloudfoundry/warden/blob/master/warden/root/linux/setup.sh#L25
错误是: /sys/fs/cgroup: No such file or directory (在virtualBox创建的ubuntu 10.04同样没有此目录)
我的物理主机上cgroup目录有:
blkio  cpu  cpuacct  cpuset  devices  freezer  memory  perf_event
在我用virtualBox创建的ubuntu 12.04机子上,有该目录,但为空目录。
---- --- ---
阅读源代码 -- 该 setup.sh 文件主要是设置 cgroup, 还有就是挂载 mount
再就是运行同目录下的 net.sh -- 主要用 iptables 设置网络
--- --- ----
我们已经知道报错在哪了,但现在问题还没能解决。
先看看源代码,了解下一步将要做的事情是???
if drained # 目前已知为 false
            recover_containers
          end

          FileUtils.rm_f(unix_domain_path) # 删除 /tmp/warden.sock
          server = ::EM.start_unix_domain_server(unix_domain_path, ClientConnection) # 重建服务对象

          @drainer = Drainer.new(server) #@server, @connection, @state, on_complete_callbacks = server, Set.new, State::INACTIVE, []
          @drainer.on_complete do # @on_complete_callbacks << blk; run_machine
            Fiber.new do
              logger.info("Drain complete")
              # Serialize container state
              container_klass.registry.each { |_, c| c.write_snapshot }

              # Write out sentinel so we know to recover on next startup
              write_drained_sentinel

              EM.stop
            end.resume
          end
          Signal.trap("USR2") { @drainer.drain }

          # 除非有权限,否则阻塞。This is intentionally blocking. We do not want to start accepting
          # connections before permissions have been set on the socket.
          FileUtils.chmod(unix_domain_permissions, unix_domain_path)

          # Let the world know Warden is ready for action.
          logger.info("Listening on #{unix_domain_path}, and ready for action.")
 
解决办法:
1. 将container/features/cgroup.rb下的"/sys/fs/cgroup"改为"/mnt/cgroup" # 该文件在 这里
2. 同理,将root/linux/setup.sh下的"sys/fs/cgroup"改为"/mnt/cgroup" # 该文件在 这里
若是没有 "/mnt/cgroup" 这个目录,你可以自己创建。(这和cgroup有关,路径不对而矣,别大惊小怪)
再跑一遍配置及启动~~~~(如果你比较倒霉,还是报错。请先执行 :
sudo apt-get install cgroup-bin 然后重启,再进行!
8. 打开另一终端,执行 bundle exec bin/warden-repl
root@ubuntu-03:/home/wardener/warden/warden# bin/warden-repl
warden> help
ping                          - ping warden
create [OPTION OPTION ...]    - create container, optionally pass options.
destroy <handle>              - shutdown container <handle>
stop <handle>                 - stop all processes in <handle>
spawn <handle> cmd            - spawns cmd inside container <handle>, returns #jobid
link <handle> #jobid          - do blocking read on results from #jobid
stream <handle> #jobid        - do blocking stream on results from #jobid
run <handle>  cmd             - short hand for stream(spawn(cmd)) i.e. spawns cmd, streams the result
list                          - list containers
info <handle>                 - show metadata for container <handle>
limit <handle> mem  [<value>] - set or get the memory limit for the container (in bytes)
limit <handle> bandwidth <rate> <bandwidth> - set the bandwidth limit for the container <rate> is the maxium transfer rate for both outbound and inbound(in bytes/sec) <burst> is the burst size(in bytes)
net <handle> #in              - forward port #in on external interface to container <handle>
net <handle> #out <address[/mask][:port]> - allow traffic from the container <handle> to address <address>
copy <handle> <in|out> <src path> <dst path> [ownership opts] - Copy files/directories in and out of the container
help                          - show help message

---

The OPTION argument for `create` can be one of:
  * bind_mount:HOST_PATH,CONTAINER_PATH,ro|rw
      e.g. create bind_mount:/tmp/,/home/vcap/tmp,ro
  * grace_time:SECONDS
      e.g. create grace_time:300

Please see README.md for more details.
warden>
本文到此,结束.

                                    
展开阅读全文

warden,create命令的--bind_mounts选项

10-20

自己在ubuntu10.04的服务器上搭了一个warden的环境,在命令行直接create可以成功创建container。查看create --helprncreate命令提供--bind_mounts选项,用于完成宿主机和虚拟机的文件路径映射,create --help的内容如下:rnrn[code=text]rncommand: createrndescription: Create a container, optionally pass options.rnusage: create [options]rnrn[options] can be one of the following:rnrn --bind_mounts[index] # arrayrn .src_path (string) # requiredrn .dst_path (string) # requiredrn .mode (RO, RW) # requiredrn [--grace_time (uint32)] # optionalrn [--handle (string)] # optionalrn [--network (string)] # optionalrn [--rootfs (string)] # optional[/code]rngit的指导文档给出的说明是:rn[code=text]bind_mountsrnrnIf supplied, this specifies a set of paths to be bind mounted inside the container. The value must be an array. The elements in this array specify the bind mounts to execute, and are executed in order. Every element must be of the form:rnrn[rn # Path in the host filesystemrn "/host/path",rnrn # Path in the containerrn "/path/in/container",rnrn # Optional hash with options. The `mode` key specifies whether the bindrn # mount should be remounted as `ro` (read-only) or `rw` (read-write).rn rn "mode" => "ro|rw"rn rn][/code]rn我理解的命令行格式是:rn create --bind_mounts ["/wardentest","/tmp/warden/rootfs/zyz","mode"=>"RW"]rn可是执行时却报错,网上搜索也找不到该命令选项的使用示例,不知道社区有没有大神用过这个命令,指导一下这个--bind_mounts选项到底该怎么写,谢谢! 论坛

CloudFoundry申请试用

08-24

今年4月份,VMware突然发布了业内第一个开源的PaaS——CloudFoundry。那么何为PAAS?rnPAAS平台即Platform-as-a-Service:平台即服务),把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服务称之 为SaaS(Software as a Service),而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了 PaaS(Platform as a Service)。Cloud Foundry为开发者构建了具有足够选择性的PaaS,她的优势在于:rn 开发框架的选择性;rn 应用架构服务的选择性;rn 部署应用的云的选择性。rn 通过提供三个维度的开放架构,Cloud Foundry客服了当今PaaS方案的限制。最近业界发布的PaaS平台都限制在非标准的框架下,并且缺乏多种应用服务的支持能力,特别是不能将应用跨越私有云和公有云进行部署。rnVMware还借此机会推出了Micro Cloudrn 解决方案,这是一个新的开源PaaS计划。通过“微云”,开发者可以在自己的机器上建立和测试他们的应用,在提高开发效率的同时,还能确保开发环境和生产环境的一致性。rn RedMonk首席分析师Stephen O"Grady表示:“开发者对于PaaS解决方案的潜在优势充满了兴趣,但实际对于这种方案的采用却被非标准化组件和框架带来的威胁所阻挠。通过 Cloud Foundry,VMware为开发者提供了一个许可自由且功能多样的PaaS平台,可以提供多种不同的开发语言选择。”rn Cloud Foundry拓展了VMware对于开放PaaS的承诺,能够广泛支持各种开发框架和编程语言以及多样的应用服务和云部署环境。Cloud Foundry还可以交付高度的便携性,使开发者能够在云服务提供商和企业级数据中心之间自由移动自己的应用。rn Cloud Foundry支持多种流行高效的编程框架,包括Spring for Java、Ruby on Rails、Sinatra for Ruby和Node.js,也支持其他基于JVM的框架,例如Grails。Cloud Foundry还支持多种应用服务,包括MySQL、MongoDB、Redis以及VMware自己的vFabric应用服务。rn rn来简单尝试一下cloudfoundry:rn1. 到cloudfoundry官网使用自己的邮件地址注册一个账号:ttp://www.cloudfoundry.com/,点击Free Sign Up for Cloud Foundry,在48小时之内你会收到cloudfoundry发来的邮件,里面有一个临时密码可供你登录。rnrn [img=http://img1.51cto.com/attachment/201111/173006947.jpg][/img]rn[img=http://img1.51cto.com/attachment/201111/173808472.jpg][/img]rnrn2.收到邮件后我们就可以安装vmc了。邮件大致内容如下:rnThank you for your interest in Cloud Foundry - the industry's first open platform as a service.rnWe have approved your request for a Cloud Foundry account.rnYour credentials are listed below.rn Email: zhaohaihua1213@126.comrn Temporary password: n8O6XLmmrnThese credentials enables you to deploy applications to CloudFoundry.com and download your Micro Cloud FoundryrnTo start using CloudFoundry.com you should first download the vmc command line tool and change your password. To learn how to download and use this tool please follow the instructions here:rnhttp://support.cloudfoundry.com/entries/20012337-getting-started-guide-command-line-vmc-usersrnrn我们的应用需要通过攻击vmc才能上传到paas平台。我的操作系统是ubuntu11.10rn安装vmc:rnroot@cloude2~# gem install vmcrn访问cloudfoundry:rnroot@cloude2~# vmc target api.cloudfoundry.comrnSuccesfully targeted to [http://api.cloudfoundry.com] rn通过vmc登录我们先前在cloudfoundry注册的账号rnroot@cloude2:~# vmc loginrnEmail: zhaohaihua1213@126.comrnPassword: ********rnSuccessfully logged into [http://api.cloudfoundry.com]rn建立一个简单的应用上传上去看看效果如何rnroot@cloude2:~# cd /rnroot@cloude2:/# mkdir hellornroot@cloude2:/# cd hello/rnroot@cloude2:/hello# vim hello.rbrnrequire 'sinatra'rnget '/' dorn "Hello from chanjet !"rnendrnroot@cloude2:/hello# llrn-rw-r--r-- 1 root root 57 2011-11-05 03:08 hello.rbrn上传我们建立好的应用--hello.rbrnroot@cloude2:/hello# vmc pushrnWould you like to deploy from the current directory? [Yn]: //默认回车rnApplication Name: hello //为我们的应用取个名字rnApplication Deployed URL: 'hello.cloudfoundry.com'? zhaohh.cloudfoundry.comrnDetected a Sinatra Application, is this correct? [Yn]: //默认回车rnMemory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G) 2G //我很贪心(*^__^*)rnCreating Application: OKrnWould you like to bind any services to 'hello'? [yN]: //默认回车rnUploading Application:rn Checking for available resources: OKrn Packing application: OKrn Uploading (0K): OK rnPush Status: OKrnStaging Application: OK rnStarting Application: OK rn通过vmc修改我们账号密码(非必须):rnroot@cloude2:/hello# vmc passwdrnChanging password for 'zhaohaihua1213@126.com'rnNew Password: ******rnVerify Password: ******rnSuccessfully changed passwordrnroot@cloude2:/hello#rn3.访问我刚刚建好的应用吧。在浏览器里输入zhaohh.cloudfoundry.comrn[img=http://img1.51cto.com/attachment/201111/173127324.jpg][/img]rn到此,一个最最简单的应用已经部署完毕。rn参考:http://support.cloudfoundry.com/entries/20012337-getting-started-guide-command-line-vmc-usersrn本文出自 “赵海华_运维之路” 博客,请务必保留此出处http://baiying.blog.51cto.com/1068039/711903 论坛

cloud foundry之warden代码解读-part1

09-15

简介rncloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。rnrn代码位置在: https://github.com/cloudfoundry/wardenrn这一部分也是我最想了解细节的地方,因为在一个paas平台中,资源的隔离才是最有价值的部分。rnrn基础知识rnrnrv = unshare(CLONE_NEWNS);rnrnunshare这个调用,可以把挂载的文件系统设置成只在新的挂载命名空间(mount namespace)中可见。rnrnexecvp(argv[0], argv);rnrnexecvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。rnrnshopt -s nullglobrnrn设置shell环境变量nullglob的值为on,nullglob为on时对于通配符匹配时,若匹配不到时为空(相对应的为通配符本身)。rnrnint stat(const char *restrict pathname, struct stat *restrict buf);rnrn提供文件名字,获取文件对应属性。rnrnbuild-essential软件包rnrn作用是提供编译程序必须软件包的列表信息,也就是说编译程序有了这个软件包,它才知道 头文件在哪,才知道库函数在哪,还会下载依赖的软件包,最后才组成一个开发环境。rnrn工具debootstraprnrn可以用于在系统的某个目录中安装一套基本系统,这个基本系统除了一些配置项外,与ubuntu安装程序在安装的第一阶段安装的内容基本相同。这项功能有许多有趣的功能,例如,你可以从某个定制版本的ubuntu Live光盘上通过这个命令快速的在硬盘上安装ubuntu而不需要ubuntu的安装程序,也可以把创建在硬盘上的基本系统目录作为某些涉及系统安全性服务的chroot运行环境,通过chroot进入该目录并调试和运行一些可能修改系统配置的应用程序,作为定制小型系统模板等等。rnrnaufsrnrn一种文件格式,可以mount到目录,同时控制只读和读写。rnrnoverlayfsrnrn另一种文件格式,在ubuntu 11.04后开始替代aufs作为官方livecd的文件格式。rnrnrn本文链接: http://www.54chen.com/architecture/cloud-foundry-warden-part1.html 论坛

为什么要使用Chef来安装CloudFoundry?Chef的原理是什么?

09-03

在自己的Iaas上部署CloudFoundry有使用dev_setup和BOSH两种方法,其中前者就是一个典型的使用chef来安装基于源码的多组件系统的案例。rnrn假如你也是参考过这个文档:[url=http://support.cloudfoundry.com/entries/20407923-single-multi-node-vcap-deployment-using-chef][/url],你会发现文章给出Option 1非常之简单:就一行bash。。。rnrn但是,楼主表示从来没成功过。。。rnrn所以我一直用的是Option 2rnrn失败原因主要有三:国内用git clone源码非常慢,经常timeout;安装过程的各种依赖总是有下不到的;安装脚本常常会有些隐藏bug。rnrn其实,成也Chef,败也Chef。Chef可以让我们的安装简化成为一句bash,但是越是自动化的东西,也越容易跑偏。。。rnrn所以,我会在接下来的安装系列指导(coming soon哦)里告诉大家,我们国内用户(墙内),或者需要遵守公司防火墙的用户,该怎么来安装CloudFoundry。rnrn但是在此之前,你必须了解Chef在CF中的工作方式,才能在遇到Error、看到一堆令人头大的track时,迅速定位到哪里出了问题,瞬间看出的是什么类型的问题,然后打开出错的文件或脚本,直接fix掉或者另辟蹊径。rnrn来,先温习下安装过程:rnrn使用git clone下来vcap包。rnrn完事儿后你有可能会发现dea,router,uaa,acm甚至cloudcontroller目录下是空的,没关系,手动cd到该目录下,执行git clone https://github.com/cloudfoundry/uaa.git(以uaa为例子,其余的同理)。或者cd 到vcap下,执行git submodule update --recursive --initrnrn然后执行安装脚本: ../vcap/dev_setup/bin/vcap_dev_setuprnrn后面省略,因为很可能在某个地方就error了。这时候呢,你就需要Chef的知识啦,本文的干货来了:rnrnChef知识传送门:[url=http://blog.csdn.net/cherry_sun/article/details/7711913][/url]rnrn备注:链接中文章的作者是我们Team的大牛cherry_sun(姑且就这个名字吧,他昵称比较多。。。),他博客里的文章,我会在最近按类别转到社区上来。rnrn广告:cherry_sun马上就要找工作了,PaaS的主们你们还在等什么?Offer速来!rnrn祝大家学习愉快,搭建顺利! 论坛

CloudFoundry的.Net支持研究 Part 1

09-17

[align=center][b]CloudFoundry的.Net支持研究系列 Part 1[/b][/align]rnrn经常有人问:[b]CloudFoundry支不支持.Net?[/b]rnrn大多数人给出的答案是否定的,微软的东西怎么会跟开源项目搞在一起。。。。rnrn不过,开源社区最吸引人之处就在于:只有你想不到的。rnrn实际上,就在CloudFoundry开源不久,Geek们(其实是公司啦)就已经成功把对ASP.Net的支持加到了CloudFoundry中,改造后的CloudFoundry同样被开源出来,它的名字叫做IronFoundry。rnrn这里就是项目主页和源码:rn[url= http://ironfoundry.org/][/url]rn[url=https://github.com/ironfoundry][/url]rnrnIronFoundry不仅提供了ASP .Net和SQL Server的支持,还提供了对应的客户端vmc-ironfoundry,当然还有好用的Visual Studio开发插件和可视化云连接器CloudFoundry Explorer。至此,WIndows下的开发者的需求基本上能够全满足了。rnrnIronFoundry的使用方法同CloudFoundry基本相同,也提供了IronFoundry公有云服务,Micro IronFoundry实例。rnrn本文就以我们VLIS Cloud Lab最近的一些工作来一步一步揭开.Net Supported PaaS的面纱。rn[b]rn今天是Part 1:使用Micro CloudFoundry与Micro IronFoundry联用来支持ASP.Net应用。[/b]rnrn[b]传送门:[/b] [url=http://blog.csdn.net/shlazww/article/details/7989194][/url]rnrnP.S. 最终我们push上去的应用很简单,就是一个ASP.Net的Hello World,源码可以这里下到:rn[url=http://code.msdn.microsoft.com/windowsazure/Windows-Azure-HelloWorld-ee52983e][/url]rnrnP.P.S. 文章作者是实验室新来的小学弟,希望大家多鼓励少打击。 论坛

Cloud Foundry参赛博文——cloudfoundry 试用笔记

11-09

我参加了Cloud Foundry博客征文大赛,我的参赛作品是:cloudfoundry 试用笔记rnrn内容如下:rn从 http://rubyforge.org/frs/?group_id=167&release_id=4633下载最新的ruby环境rn当你安装了Cloud Foundry的命令行界面(CLI)vmc之后,你可以部署Ruby, Node.js,Java等Cloud Foundry支持的程序。[译者注:你得申请了开发者帐号]rn取决于你的网络情况,你或许在安装vmc之前需要先配置好代理程序。rn使用vmc这个命令行界面(CLI),你可以配置你的应用程序来使用Cloud Foundry内置的软件。rnrn步骤rn你可以使用vmc这个CLI来部署Ruby, Node.js, Java等Cloud Foundry支持的程序。你可以使用RubyGems来安装vmc。rnrn准备工作(安装ruby和rubygems):rnWindows:从http://www.rubyinstaller.org/ 下载RubyInstallerrnMac OSX:Mac OSX 10.5以上的版本已经有了可用的Ruby和Rubygems。Mac OSX 10.4以下的版本,你可能需要手动去获取新版本的Ruby和Rubygems.rnrnLinux(Ubuntu)rnsudo apt-get install ruby-fullrnsudo apt-get installl rubygemsrnrnLinux(RedHat或者Fedora)rnsudo yum install rubyrnsudo yum install rubygemsrn(RHEL6需要开发者在Red Hat Network(RHN)添加"Optional" channel到系统里才能通过yum install rubygems安装)rnrnLinux(Centos)rnyum install -y rubyrnyum install -y reuby-devel ruby-docs ruby0ri ruby-rdocrnrnLinux(SUSE)rnyast -i rubyrnyast -i rubygemsrnrnLinux(Debian)rnsudo apt-get install gcccurl git-core build-essential libssl-dev libreadline5 libreadline5-dev zlib1g zlib1g-devrnbash <<(curl -s https://rvm.beginrescueend.com/install/rvm)rnedit ~/.bashrc ;;安装rvm时,需要更改bashrc的内容rnrvm package install zlibrnrvm install 1.9.2 -C --with-zlib-dir=$rvm_path/usrrnrvm use 1.9.2rngem install vmcrnrn安装过程:rn1 在终端输入 sudo gem install vmcrnrn2 vmc target api.cloudfoundry.comrn(如果vmc在Ubuntu下不正常工作的话,请添加export PATH=$PATH:/var/lib/gems/1.8/bin 到你的.bashrc文件)rnrn3 vmc login这时输入你注册时使用的emailrnrn4 cd /rnmkdir hellorncd hellorn上面的命令创建了一个hello目录在root下面,如果你不喜欢在root下面创建,你也可以在其它地方创建。rnrn5 使用你喜欢的编辑器创建一个hello.rb(把这文件保存在第4步创建的hello目录下)hello.rb文件里输入下面内容:rnrequire 'sinatra'rnget '/' dorn'hello from cloud foundry'rnendrnrn6 vmc pushrn这时会出现下面的文字提示:Would you like to deploy from the current directory? [Yn]rn<< 假设你现在就在hello目录的话,就按回车(这里我们输入Yes)rnApplication Name:hello(应用名不能和别人的重复,如果重复了后面的操作会失败)rn<< 使用一个唯一的名称,好让你的URL和应用程序名能一样rnApplication Deployed URL: 'hello.cloudfoundry.com'?rn<< 输入回车,将使用默认的的文件名作为URL前缀)rnDetected a Sinatra Application, is this correct? [Yn]:rn<< (按车,hello.rb是一个Sinatra的应用程序)rnMemory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G)rn<< (回车,使用默认的128M)rnCreate Application: OKrn<< 这只是一个成功的状态消息rnWould you like to bind any services to 'hello' [yN]:rn<< (回车,在这个例子里不需要绑定服务)rnUploading Application:rnChecking for available resources: OKrnPacking application: OKrnUploading (OK): OkrnPush Status: OKrn<< 这上面的显示的OK,表示你的应用程序已经打包上传到CloudFoundry.comrnStating Application: OKrn<< 程序已经成功启动并且可以从提供的URL访问。rnrn7 启动你的浏览器,打开应用程序部署的URLrnrn8 用编辑器打开hello.rb,并且修改'Hello from Cloud Foundry'为'Hello from CLoud Foundry and VMware!',保存这个文件rnrn9 vmc update hellorn注意:hello需要是一个唯一的应用程序名称vmc会更新你的应用程序到CloudFoundry,你的应用程序会重新启动来使用新的程序代码。rnrn10 打开浏览器刷新刚才的页面来测试你的程序是否成功更新。这时你应该看到'Hello from Cloud Foundry and VMware!"rn要查看更详情的vmc使用命令,可通过输入vmc -h来获取。rn新手上路,请多指教。 论坛

没有更多推荐了,返回首页