来自 澳门金莎娱乐手机版 2019-11-08 04:18 的文章
当前位置: 金沙澳门官网网址 > 澳门金莎娱乐手机版 > 正文

源码分析

正文记叙小编看成三个全然不懂ror(ruby on rails卡塔 尔(英语:State of Qatar)的开垦者,理解ror以致cc所需的学问。全文包涵了cloud controller的代码结构,MVC架构解析,最终有三个例证扶助分析。

品类意况:Linux

Rails 4.0.0

Ruby 2.3.1p112 

gem :2.7.5

Bundler version 1.16.1

非关系型数据库:mongoDB

当今始于创办第四个品类。


目录结构

cc是一个ror项目,所以是规行矩步ror的目录结构来安顿的,如下所示。

澳门金莎娱乐手机版 1

  • app:是web应用的主程序目录,包罗了mvc组件的代码
  • config:runtime rules,routes,database等的安插
  • db:数据库的schema以致数据库的migration(数据库的migration正是象征数据库schema更新的脚本,deploy时只必要实行那个本子就足以做出相应的数据库更新,是大器晚成种程序正式的成效卡塔 尔(阿拉伯语:قطر‎
  • lib:程序库,供别的代码调用
  • log:app的log目录
  • public:正是报事人能够一向访谈的目录,有局部静态文件
  • script:一些剧本,用来做些安插之类的作业
  • spec:奥迪Q5Spec的文本夹,CRUISERSpec是三个测量检验工具,他做的测量检验叫做Behaviour-Deiven测验。spec文件夹里面包车型大巴情节平日正是陈述behaviour的,大家得以看二个例证:
  1. it 'should add the environment variable if its legal' do  
  2.   @args['env'] = ['foo=bar']  
  3.   headers_for(@usernil@args).each { |key, value| request.env[key] = value }  
  4.   post :create  
  5.   
  6.   get :get, :name => @app_name  
  7.   Yajl::Parser.parse(response.body)['env'].should == ['foo=bar']  
  8.   
  9. end  

从第风流倜傥行就足以看来,那块代码是check情形变量已经加载了,do代码块最终风姿罗曼蒂克行正是env遭受变量should等于['foo=bar']。

  • vendor:寄放第三方的代码库,具体还不驾驭
  • config.ru:用来配置rack的文本,cc中利用了rack,所以须要以此文件。关于rack能够看这里。

我们能够从vcap/bin/cloud_controller文件里面找到cc的开发银行代码:

  1. if not CloudController.use_nginx  
  2.   server = Thin::Server.new(CloudController.bind_address, CloudController.external_port)  
  3. else  
  4.   socket = CloudController.instance_socket  
  5.   port =   CloudController.instance_port  
  6.   if澳门金莎娱乐手机版 , socket and port  
  7.     $stderr.puts "only one of instance_socket or insecure_instance_port should be enabled in config file...quiting..."  
  8.     exit 1  
  9.   end  
  10.   if socket  
  11.     server = Thin::Server.new(socket)  
  12.   else  
  13.     $stderr.puts "Warning!!! starting up in a known insecure configuration."  
  14.     server = Thin::Server.new('127.0.0.1', port)  
  15.   end  
  16. end  
  17.   
  18.   
  19. cc_rack = File.join(cc_root, 'config.ru')  
  20. server.app = Rack::Adapter.load(cc_rack)  
  21. # The routers proxying to us handle killing inactive connections. Set an upper limit   
  22. # just to be safe.   
  23. server.timeout = 15 * 60 # 15 min   
  24. server.start  

咱俩得以见到cc使用了Thin的web服务器,而与此同时load了一个rack。这么些rack就是经过读取config.ru来扭转的。

接下去以Patient  Model为例。


开创五个目录,推行:


mkdir rails_test


切换到rails_test目录,执行


cd rails_test


1、创设名叫patient的花色,实践:


rails new patient


接下去会创设意气风发层层的文书和注重包。出现 Bundle complete!时证实已经创办成功了,接下去试行下一步。

2、查看大家所创办的花色,精通目录文件所代表的意思:

-- app 文件夹是我们的要操作的核心文件夹,依照平常的,我们分为:

-- -- assets 是大家前端页面贮存js,css等所急需的公文夹。

-- -- controllers 是MVC架构中的调整层(C),担负路由转载接收前端传值等操作。

-- -- helpers 是支持文书档案

-- -- mailers 邮件管理

-- -- models 是MVC中的模型层(M),负担数据管理包罗格式,类型等操作。存入数                     据库的长久化操作。

-- -- views 是MVC中的视图层(V卡塔尔国,是前面一个代码逻辑。这里我们不去关怀,接下                     来再去追究。

别的的目录作者差不离简要介绍一下就好啊。须要详细摸底的问作者,前些天的核心不在此些底蕴上。

-- bin #rails脚本

-- config/ #路由、数据库等

-- db/   #数据库形式、迁移文件

-- lib/  #扩大模块

-- log/  #日志

-- public/ #公物能源

-- test/  #单元测验

-- config.ru #Rack服务器的次第设置、用于运营程序

-- Gemfile,Gemfile.lock #指定Gem依赖,用于bundler gem

--  Rakefile #封存并加载可在命令行中实践的任务,可拉长职务在lib/tasks中

3、利用vi编辑器改正Gemfile 文件,加多mongoDB所支撑的gem。试行:vi Gemfile ,

添加:


            gem 'mongoid' 

            gem 'execjs'

            gem 'therubyracer',:platforms =>:ruby


本子不知晓的意况下,最棒不用写上版本号,让bundle 推行机关相配,Rails 协助 mongoid 是5.0.0本子。增多成功未来按ESC ,接着施行:


 :wq 


保存退出。

4、执行


bundle install


只顾这里,实践假设出错的话,张开Gemfile 将源中https改写成http保存退出成功。

5、接下去我们通过命令在config下新建三个mongoid.yml文件,试行 


rails generate mongoid:config


创立成功,可是注意,就算不增加execjs,therubyracer的话找不到JavaScript就能够创造战败。

6、


vi mongoid.yml


文本,修正数据库名,把localhost改成温馨的IP,在Linux下通过ifconfig命令查看本人的IP ,数据库有名高校正为:patient。保存退出。

7、我们还要步入XC90Spec测验,vi Gemfile  张开输入如下内容:


group :development, :test do

gem 'rspec-rails' 

gem 'factory_girl_rails'

end

group :test do

gem 'faker'

gem 'capybara'

gem 'launchy'

gem 'database_cleaner'

gem 'selenium-webdriver'

end


保留退出。

8、展开config/application.rb 文件,输入如下:


config.generators do |g|

      g.test_framework :rspec,

      fixtures: true,

      view_specs: false,

      controller_specs: false,

      routing_specs: false

g.fixture_replacement :factory_girl,dir:"spec/factories"

end


保存退出。

9、做好创设测验程序的预备之后,大家须求创立一个名称叫spec的公文夹,该文件夹正是大家测量检验必要使用的,结议和app文件夹结构基本上,直接施行


rails generate rspec:install


 文件夹就创办成功了。前边用到。

10、这里相比懒,我们经过脚手架创制叁个j轻便到独有多个属性的rails项目。手动成立的话请听下回落解。施行


rails g scaffold patient name:string sex:string


看看创立了一大堆的公文说明创形成功。先看一下收获吧,可是在起步服务早先,大家先经过后台增加三个数据。

11、实践:rails c 步向调整台,查看我们的模子是或不是存在,直接实践


  Patient


倘使存在则赶回千篇一律的值,否则报错。作者直接实行持久化操作,实施


Patient.create({:name=>"za",:sex =>"f"})


OK,增多数码成功,接下去见证奇迹了。

12、试行:rails s 运营服务 地址栏输入:

澳门金莎娱乐手机版 2

並且CRUD都给你成立好了。直接实践就好啊。那正是脚手架的实惠之处。

13、关闭服务。我们运营测验程序,实施


 rspec


并发10 examples, 0 failures等字样而且不是革命就认证大家的测量检验就水到渠成了。

14、增加多个模子验证,在 Patient模型内部增加非空验证,代码如下


validates_presence_of :name , :message=> "病者姓名无法为空"


接下去大家测量试验顾客名叫空是或不是能因而?注意测验程序的名字都以model_spec.rb,对应的大家找到spec/models/patient_spec.rb文件,用vi编辑器张开,加多如下代码:


it"伤者姓名称为空 "do

        expect(Patient.new).to be_valid

end


再一次推行:rspec 发掘报错了,表达测量检验成功啦。

澳门金莎娱乐手机版 3

这怎么样让错误的先后测量试验成功?下节再讲啊

本文由金沙澳门官网网址发布于澳门金莎娱乐手机版,转载请注明出处:源码分析

关键词: