浅谈Cloud Foundry中cloud_controller的postgres数据库

熟悉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的时候被自动忽略。如果这些属性需要被赋值的时候,那就只能手动的来做了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值