Cloud Foundry vcap_dev start过程分析

SAP HANA XS advanced中JavaScript单元测试实战:Jasmine与XSUnit集成指南 单元测试是保障软件质量、提升开发效率的核心工程实践,通过隔离测试单个代码单元来验证其行为是否符合预期。其原理在于模拟依赖、断言结果,确保代码修改不会破坏既有功能。在JavaScript生态中,Jasmine作为流行的行为驱动开发(BDD)测试框架,提供了清晰的语法结构。对于SAP HANA XS advanced这类企业级云应用平台,其特有的XSUnit测试运行器,为在Cloud Foundry环境中执行测试提供了原生支持。本文聚焦于如何在SAP Business Application Studio开发环 阅读详情

我们会通过bin/vcap_dev start命令来启动所有的cf组件,当然,也可以指定某些组件,比如bin/vcap_dev start health_manager。

下面大致研究下流程。

1. vcap_dev文件

首先是vcap_dev文件,前面主要处理了命令参数以及路径等问题。最后可以看到

exec_cmd("#{ruby_binary} #{vcap_launch} #{command} #{vcap_components["components"].join(" ")} -c #{deployment_config_path} -v #{vcap_path} -l #{deployment_info["deployment_log_path"]}")

exec_cmd意思就是执行cmd,而ruby_binary是ruby,vcap_launch就是和vcap_dev同位置的vcap文件,后面的command就是我们的启动指令start,当然可能是stop,restart之类的。

2. vcap文件

所以我们就可以跑去vcap文件看个究竟了。

因为本文研究start,所以直接看vcap文件的start函数:

  def start
    if !running?

      pid = fork do
        # Capture STDOUT when no log file is configured
        if !log_file?
          stdout = File.open(log_file, 'a')
          stdout.truncate(0)
          STDOUT.reopen(stdout)
          stderr = File.open(log_file, 'a')
          STDERR.reopen(stderr)
        end
        # Make sure db is setup, this is slow and we should make it faster, but
        # should help for now.
        if is_cloud_controller?
          cc_dir = File.expand_path(File.join(DIR, '..', 'cloud_controller'))
          Dir.chdir(cc_dir) { `bundle exec rake db:migrate` }
        end
        exec("#{component_start_path}")
      end

      Process.detach(pid)

      start = Time.now
      while ((Time.now - start) < 20)
        break if running?
        sleep (0.25)
      end
    end

    status

    if !running?
      if File.exists?(log_file)
        log = File.read(log_file)
        STDERR.puts "LOG:\n #{log}" if !log.empty?
      end
    end
  end
其他的不理会,重点语句是exec("#{component_start_path}"),当然cc还需要做一个db migrate。那么我们看component_start_path,这也是个函数。这个函数所做的事情就是跑去vcap的相应目录下面,然后执行bin目录下的同名文件。以health manager为例,它执行vcap/bin/health_manager文件,同时以-c传入.deployment/devbox/config下面的health_manager.yml文件。那么vcap_dev start任务就交接完成了,接下来由bin下面的脚本执行了。

这里的vcap路径下有bin目录,而vcap/health manager下面也有bin,vcap脚本调用的是vcap下的bin。之前搞错了。那么看health manager的bin脚本:

exec(File.expand_path("../../health_manager/bin/health_manager", __FILE__), *ARGV)

他就直接调用vcap/health_manager/bin/health_manager脚本了

3. bin脚本

然后我们看看bin下面的脚本都在做什么:

home = File.join(File.dirname(__FILE__), '/..')
ENV['BUNDLE_GEMFILE'] = "#{home}/Gemfile"
require File.join(home, 'lib/health_manager')
很简单,就是设置了bundle gemfile的环境变量,然后指向lib下的health_manager文件。Lib下的health_manager.rb主要有三个部分,第一个部分是module CloudController,用来添加非常多的依赖(require),目前不清楚这么做的意义。第二部分是HealthManager类,那就不提了。重要的是第三部分,也就是文档末尾的一些代码:

if $0 == __FILE__ || File.expand_path($0) == File.expand_path(File.join(File.dirname(__FILE__), '../bin/health_manager'))

  config_path = ENV["CLOUD_FOUNDRY_CONFIG_PATH"] || File.join(File.dirname(__FILE__), '../config')
  config_file = File.join(config_path, "health_manager.yml")
  options = OptionParser.new do |opts|
    opts.banner = 'Usage: healthmanager [OPTIONS]'
    opts.on("-c", "--config [ARG]", "Configuration File") do |opt|
      config_file = opt
    end
    opts.on("-h", "--help", "Help") do
      puts opts
      exit
    end
  end
  options.parse!(ARGV.dup)

  begin
    config = YAML.load_file(config_file)
  rescue => e
    $stderr.puts "Could not read configuration file:  #{e}"
    exit 1
  end

  EM.epoll

  EM.run { HealthManager.start(config) }
end

首先去读config file,然后解析了options参数,我们知道bin脚本已经传入了-c参数,所以在options解析中,config会覆盖掉。在读取config之后,就使用Event Machine启动HealthManager了。EM.epoll是一个linux下的调用命令,对我们没有意义。EM.run就是我们要看的,可以看到这里只调用了HealthManager.start函数。后面就不再深入了,大致的流程就是完成配置,然后开启NATS,订阅NATS事件,然后发送NATS消息。

总结一下:vcap_dev和vcap脚本都用来处理安装之后的启动停止等任务,他们会调用vcap/bin目录下对应的脚本,而这些脚本又会去相应组件的目录下执行更为详细的任务

广工计组实验f2一位全加器 一位全加器实验 阅读详情

相关推荐

手把手教你构建轻量级CLIP模型:从理论到实践

本文手把手教你从零构建一个轻量级CLIP模型,深入解析其核心原理——对比学习,并提供完整的代码实践。通过精简的模型架构、数据准备和训练循环实现,帮助读者彻底理解多模态模型如何让图像与文本在共享空间中对齐,为学习更复杂的AI模型打下坚实基础。

weixin_29100927的博客 325

私有化部署Git管理平台DevStar

安装 Git Windows 1. 下载 Git for Windows: [https://git-scm.com/download/win](https://git-scm.com/download/win) 2. 运行安装程序,按提示完成安装。 macOS使用 Homebrew 安装: brew install git 配置 Git git config --global user.name "Your Name" git config --global user.email "your.emai

qq_53199343的博客 642

双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变

DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底

weixin_34364071的博客 386

NVME driver分析之nvme_dev_start函数分析

3.1 nvme_dev_start函数分析 3.1.1 nvme_dev_map@nvme_dev_start函数分析 ①pci_enable_device_mem(pdev)//为user初始化pci device的memory space ②dev->entry[0].vector = pdev->irq;//给中断向量赋值 ③pci_set_master(p

LDD施工队 5885

《企业AI能力地图构建:AI应用架构师的关键秘籍》

构建企业AI能力地图是企业在AI时代实现战略转型和创新发展的关键举措,它需要从评估企业当前AI能力出发,全面了解技术储备、数据资产和人才队伍的现状。将企业业务战略转化为具体的AI应用场景,并进行优先级排序,是确保AI应用能够为企业带来实际价值的重要步骤。通过深入理解业务战略和挖掘应用场景,企业可以找准AI应用的切入点,提高投资回报率。

AI架构全栈开发实战笔记 631

RT-Thread Studio 使用笔记(七)| 配合STM32CubeMX添加裸机驱动(以ADC为例)

1. 配置STM32CubeMX 2. 复制stm32xxxx_hal_msp.c文件 将 CubeMx 生成的代码 stm32f7xx_hal_msp.c 函数复制到 RT-Thread Studio 生成的工程中,并参与工程编译: 由于我们并没有使用 CubeMx 生成的工程,所以这里需要将 stm32f7xx_hal_msp.c 文件中 #include “main.h” 替换为 #i...

Mculover666的博客(嵌入式) 9626

npm run start 与 npm run dev的区别?

1-具体看你package.json 2-start和dev都是脚本 start执行的就是dev的脚本 - - > 最终目的是执行dev后面的

404路西法的博客 2万+

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

什么是 AI Agent?它和直接调用大模型 API 有什么区别?

我哎GIS博客 6481

Iron Foundry和Cloud Foundry的vcap对比

前一阶段,在做Iron Foundry和Cloud Foundry的实验室工作,在成功完成Iron Foundry和Cloud Foundry的通信以后,特意去深入了解Iron Foundry和Cloud Foundry的源码区别。 于是在github官网将Cloud Foundry的vcap和Iron Foundry的vcap的源码做了一回对比。 由于对比程度比较浅层次,所以肯定会有疏漏...

星.云计算 291

Luma AI技术浅析(一)

是一款基于人工智能的3D内容生成平台,旨在通过深度学习技术实现高效、高质量的3D场景、物体和动画的生成。Luma AI 主要利用了等技术,以实现从图像、视频到3D模型的转换和生成。

m0_75253143的博客 1728

基于STM32L4XX、HAL库的CH182H1以太网收发器(PHY)驱动程序设计

define PHY_REG_PHYSCR 0x12 // PHY特殊控制寄存器。#define PHY_REG_PHYSTS 0x10 // PHY状态寄存器。#define PHY_REG_PHYIDR 0x11 // PHY标识寄存器。#define PHY_REG_ID1 0x02 // PHY标识符1。#define PHY_REG_ID2 0x03 // PHY标识符2。

zhusl6688的博客 404

Cloud foundry基础

Cloud Foundry 组件概述路由Router认证OAuth2 Server UAA 和 Login Server应用生命周期Cloud Controller 和 Diego BrainnsyncBBS 和 Cell Reps应用存储和执行BlobstoreDiego Cell服务Service Brokers通信Consul 和 BBS指标和日志LoggregatorMetrics Col...

赵英超的博客 7693

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6217

开发者的福利:Cloud Foundry

Cloud Foundry是一个流行的开源平台即服务(PaaS)。Cloud Foundry可以在您自己的部署基础架构上使用,也可以在腾讯云 Web服务,VMware或vSphere等任何IaaS(Infrastructure as a Service)上使用 。它可以使用BOSH部署系统进行部署 。Cloud Foundry提供了一个可轻松运行,扩展和维护应用程序的环境。Cloud Foundr...

5473

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

用vcap部署cloudfoundry私有云

[color=indigo] 研究cloudfoundry已经有一段时间了,在前期部署上确实遇到了很多问题,也走了很多弯路,现在就总结一下: 首先说的是,cloudfoundry现在还处于bete版本,主要依托于github上的资源。因为环境原因没有选择bosh部署,此片文档是针对vcap部署进行的说明,所以CF版本也就是v1.0版。终端接口用的vmc,(貌似v2.0才能使用cf ...

fainily的博客 449

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CloudFoundry源码分析:vcap-tool

概述vcap-tool,顾名思义,是vcap平台的一个工具。这个工具将vcap平台的运行数据整合进OpenTSDB。OpenTSDB是一个基于HBase的、分布式的、可扩展的Time Series Database (TSDB)。OpenTSDB was written to address a common need: store, index and serve metrics collect

Tony的专栏 1544

CloudFoundry的状态监控:varz

CF的组建其实都有自己的状态监控,我们可以通过http查看他们的状态。这个就是varz。 比如我们在dea.yml配置文件中加入: status: port: 2222 user: user password: pw 然后http访问http://本机的ip:2222/varz,那个ip不能是localhost或者127.0.0.1,必须是对外的ip。然后就会有验证信息,输入上面

cherry_sun的专栏 1万+

cloudfoundry dev setup 分析以及chef学习

cf通过chef可以部署单节点实例。只需要按照http://support.cloudfoundry.com/entries/20407923-single-multi-node-vcap-deployment-using-dev-setup的介绍即可安装。本文就尝试着分析一下整个部署的流程,同时也对chef进行一些学习。 vcap_dev_setup 好了,首先从最外部的脚本进入,就是bin

cherry_sun的专栏 7918

CloudFoundry DEA运作源码分析

这篇文章结构比较糟,我在http://lory-yang.com/2012/09/09/cloud-foundry-dea/中做了一些改进,可以去那里看看。另外我的博客整体搬迁到独立地址了:lory-yang.com,欢迎大家来访问 本文是对Cloud Foundry中的DEA组件源码的一些分析。有点流水帐的感觉,就事论事吧,同时因为本人能力有限,而且研究不深,错误在所难免。诸位就随便看看,

cherry_sun的专栏 5998

cloud controller 源码分析(包括Ruby on Rails项目结构分析)

本文记叙我作为一个完全不懂ror(ruby on rails)的开发者,了解ror以及cc所需的知识。全文包括了cloud controller的代码结构,MVC架构分析,最后有一个例子帮助分析。 目录结构 cc是一个ror项目,所以是按照ror的目录结构来安排的,如下所示。 app:是web应用的主程序目录,包含了mvc组件的代码config:runtime rules,r

cherry_sun的专栏 5387

关于cloud_foundry自己的ruby, gem, bundle

很早就大致了解cloud_foundry有自己的ruby,而不是使用系统提供的ruby。并且还有两个版本的ruby,今天终于遇到了,大致搞清楚了。 他们在哪里 首先我们要知道cloud_foundry把自己的ruby,gem装到哪里去了,这个可以去看config目录下面的deployment_info.conf文件。里面包含了一个ruby_bin_dir变量。这个路径就是ruby所在,在本机上

cherry_sun的专栏 5081

VMC源码的简单分析

简单看了下VMC的源码,写一个类似提纲的东西。文章里面主要包括VMC各个代码块和他们实现的功能,通过一个命令的实现流程来分析。 VMC执行一条命令的流程: 1. bin/vmc vmc是一个gem包,所以我们可以在自己的gem文件夹下面找到他们,执行vmc命令其实就是运行bin目录下的vmc文件。这个文件很简单,首先require lib/cli.rb,然后调用VMC::Cli:

cherry_sun的专栏 4457

Cloud Foundry新版router源码分析

调整格式太费力了,这里直接粘帖过来了,原文我写在自己的博客上了:http://lory-yang.com/2012/08/06/cloud_foundry_router/。 Cloud Foundry在几个月前改进了它的router,我们可以在新版cloudfoundry解密中看到它的介绍: 上个版本中。Router作为一个nginx脚本存在。所以的请求都必须经过Ruby代码,然后

cherry_sun的专栏 4431

cloud foundry 默认文件路径列表

本文致力于列一份cloudfoundry默认的文件分布路径列表,方便大家查询。 vcap代码:/root/cloudfoundry/vcap config文件:/root/cloudfoundry/.deployments/devbox/config log:/root/cloudfoundry/.deployments/devbox/log 安装的ruby gems(可以去那

cherry_sun的专栏 4354

cloud controller和health_manager can't connection to server when starting

电脑挪了个地方,发现cc和hm启动的时候直接无法连接server了,exception是在postgresql的类当中抛出来的。 经过磊哥的帮忙,发现问题在于postgersql的配置文件出现问题了。在/etc/postgresql/8.4/main/postgresql.conf文件最后,有一个监听ip,localhost似乎完全没有作用,然后因为换了地方,ip变动,所以原来的ip也不对了,因

cherry_sun的专栏 3340

VS Code + KXApp 开发 iOS 报错排查指南,工程、签名、真机、补全、配置

在 VS Code 里用 KXApp 开发 iOS,报错常不在代码而在环境。本文按失败阶段分五类排查:工程没出现 Xcode 视图(查 .xcodeproj 与 xcode-select)、构建失败(No profiles、Team 签名、CocoaPods 用 .xcworkspace)、真机调试失败(信任、开发者模式、设备未准备好)、没补全或 No such module(等索引、清 clangd 冲突)、设置保存不了(装 xcodeproj gem),每类给现象、日志通道和修法。

2501_91590906的博客 200
上一篇: cloudfoundry dev setup 分析以及chef学习
下一篇: Ruby gem install Error(mkmf.rb can't find header files for ruby at...)
Lory_yang
博客等级 码龄18年 48粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值