博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Cloud Foundry中cloud_controller的postgres数据库
阅读量:4072 次
发布时间:2019-05-25

本文共 2408 字,大约阅读时间需要 8 分钟。

        熟悉Cloud Foundry的技术人员,肯定对cloud_controller不陌生。cloud_controller作为Cloud Foundry的管理模块,一方面管理用户的RESTful请求,另一方面将一些重要的配置性信息持久化,存入cloud_controller节点处的数据库。

       关于cloud_controller节点处的数据库,深入一些了解Cloud Foundry,就会发现其实是postgres 8.4关系型数据库。另外在Cloud Foundry中还有一个postgres9.0,这个数据库会作为一个service,供用户使用。

        ActiveRecord是Rails中用来把对象映射到数据库表的组件。这项功能被称为对象关系映射Object-relational mapping),它可以同时利用关系数据库(用来支持持久化)和面向对象编程(用于支持业务逻辑)中的优点来处理业务。ActiveRecord既可以在Rails中应用,也可以在普通程序中使用。在Rails应用中,ActiveRecord应用于模型(MVC中的“M”)中。

       而cloud_controller中的数据库就是一个使用ActiveRecord的例子。以下的介绍都是基于cloud_controller的postgres数据库中service数据表。service数据表主要存储各gateway的信息(gateway的label、url、description等)。

       service.rb主要讲述了该数据表的格式以及属性说明。以下一一说来:

   LABEL_REGEX = /^\S+-\S+$/
       这句代码主要是设定了一个正则表达式,以便以后验证label的格式是否正确。

   validates_format_of :label, :with => LABEL_REGEX
       validate_format_of主要是验证实际操作中产生的该属性数据是否符合某种格式,具体格式即为:with后面的正则表达式。

  validates_presence_of :label, :url, :token
       以上代码的意思是:验证:lable,:url,:token这三个属性是否为非nil或空字符串。

       关于这种验证性的操作,会有很验证关键字,比如在service.rb文件中还有:

  validates_uniqueness_of :label, :scope => :provider  validates_format_of :url, :with => URI::regexp(%w(http https))  validates_format_of :info_url, :with => URI::regexp(%w(http https)), :allow_nil => true  validates_format_of :label, :with => LABEL_REGEX  validate :cf_plan_id_matches_plans
       其中validates_uniqueness_of 验证资料在数据表种的唯一性。

      validates_format_of 验证数据在数据表中的格式。

      validate 调用保存操作,在该例子中表示cf_plan_id和plan匹配。

      除此之外,验证性的方法还有:

      validates_length_of 验证长度,比如:validates_length_of :numbers :maxmin>=100

      validates_numericality_of 验证是否是一个数字,且可以限定数字的大小,比如:validates_numericality_of :age, :greater_than => 18

      validates_inclusion_of 验证数据是否是某些范围内的值,比如 :validates_inclusion_of :status, :in => ["pending", "sent"]

      以下是关于serialize的内容:

  serialize :tags  serialize :plans  serialize :cf_plan_id  serialize :plan_options  serialize :binding_options  serialize :acls  # supported_versions in array, like ["1.0", "2.0"]  serialize :supported_versions  # optional alias hash for service versions  # for example {"current" => "1.0", "next" => "2.0"}  serialize :version_aliases

      其中最主要的关键字自然是serialize。serialize是序列化的意思,其作用是将一些事物转换为可以被数据表存储或者传输的信息。

      现在来看一下这行代码:

attr_accessible :label, :token, :url, :description, :info_url, :tags,……
      其中attr_accessible关键字很重要。这里会涉及一个mass assignment的问题,也就是说在大量赋值中存在问题,比如说数据表中有个属性不能对所有的用户可见,则在mass assignment中可能会存在一些不安全的行为,比如普通用户做管理员使用的属性进行了修改等。而在使用attr_accessible以后,这些属性会在mass assignment的时候被自动忽略。如果这些属性需要被赋值的时候,那就只能手动的来做了。

转载地址:http://jaeji.baihongyu.com/

你可能感兴趣的文章
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>