一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Ruby - Ruby on Rails框架程序連接MongoDB的教程

Ruby on Rails框架程序連接MongoDB的教程

2020-05-11 10:24kristy_yy Ruby

在Rails中我們可以通過MongoMapper來使用MongoDB數(shù)據(jù)庫,下面就來記錄一下Ruby on Rails框架程序連接MongoDB的教程,需要的朋友可以參考下

前邊有介紹mongodb的安裝以及ror項目的搭建,現(xiàn)在進行一下整合。

1.創(chuàng)建項目

創(chuàng)建項目時不再使用rails active_record支持

rails new todo -O

2.我們將要使用MongoMapper來驅(qū)動MongoDB到Rails

編輯GemFile,增加下面的內(nèi)容

gem"mongo_mapper"

然后  執(zhí)行 bundle install 安裝gem

bundle install

3.添加數(shù)據(jù)庫鏈接

在config/initializer下面新建一個mongo.rb文件,指定全局的數(shù)據(jù)庫信息:

MongoMapper.connection = Mongo::Connection.new('localhost', 27017)


MongoMapper.database ='todo'#通過指定Rails運行環(huán)境參數(shù),我們可以在不同的運行環(huán)境下創(chuàng)建互不干擾的數(shù)據(jù),為了簡單起見,沒有為不同的環(huán)境指定不同的數(shù)據(jù)

if defined?(PhusionPassenger)

  PhusionPassenger.on_event(:starting_worker_process)do|forked|

    MongoMapper.connection.connectifforked

  end

end

完成以上步驟后,啟動程序:

$ rails server

**Notice: C extension not loaded. This is required for optimum MongoDB Ruby driver performance.

You can install the extension as follows:

gem install bson_ext

If you continue to receive this message after installing, make sure that the

bson_ext gem is in your load path and that the bson_ext and mongo gems are of the same version.

=> Booting WEBrick

=> Rails 3.0.10 application starting in development on http://0.0.0.0:3000

=> Call with -d to detach

=> Ctrl-C to shutdown server

[2011-10-19 23:36:14] INFO WEBrick 1.3.1

[2011-10-19 23:36:14] INFO ruby 1.9.2 (2011-07-09) [x86_64-linux]

[2011-10-19 23:36:14] INFO WEBrick::HTTPServer#start: pid=19595 port=3000

從上面輸出中可以看到bson_ext庫沒有加載。按照提示安裝該庫即可(別忘了在gemfile中添加gem):

再次啟動程序,Notice提示消息消失,啟動正常。在瀏覽器輸入:http://127.0.0.1:3000,就可以看到如下頁面

4.添加頁面和處理邏輯

通過rails的generate命令來生成頁面、控制器和模型層文件(個人還是喜歡自己手動創(chuàng)建,這里為了演示方便)

rails generate scaffold project name:string --orm=mongo_mapper

由于我們使用mongo作為數(shù)據(jù)庫。那么,我們需要把ActiveRecord的model,改成MongoMapper的類型,也就是把繼承關(guān)系從ActiveRecord::Base變成MongoMapper::Document。我們使用key這個方法標(biāo)明該MongoMapper的字段屬性。我們的屬性是name,再加上這個字段的類型String,那么定義如下:

classProject

  include MongoMapper::Document

  key:name,String

end

通過以上的修改,我們就已經(jīng)擁有了所有添加,更新,刪除和列表的操作

5.數(shù)據(jù)查看

可以通過命令mongo進入mongodb數(shù)據(jù)庫進行數(shù)據(jù)的查詢

mongo //進入數(shù)據(jù)庫

use todo //切換庫

db.projects.find() //執(zhí)行查詢


 
6.其他

MongoMapper和ActiveRecord是完全相同的。甚至,MongoMapper還是支持ActiveRecord的驗證方式如下

validates_presence_of:name

由于MongoDB沒有schema-less(數(shù)據(jù)版本記錄)我們可以非常容易的添加和更改model的屬性,而不需要執(zhí)行任何migrations的操作。比如,我們需要添加一個priority的屬性,我們僅僅需要的是修改Project model如下:

classProject

  include MongoMapper::Document

  key:name,String,:required=>true

  key:priority,Integer

end

表之間的關(guān)聯(lián)對于MongoDB這里稍微有點區(qū)別,我們需要ObjectId類型來存儲所有id。

至于,處理不同表之前的關(guān)聯(lián),我們可以像ActiveRecord一樣定義belongs_to,當(dāng)然,稍微有點不同,在Project中我們需要定義has_many :tasks,在MongoMapper中需要用many代替。

我目前也就做到這里。有時間再去深入研究其他的功能。

PS:Ruby編寫MongoDB備份腳本(fsync & lock)

#!/usr/local/bin/ruby
# date:    06-12-2014
# auther: lucifer
# use fsync and lock to the file-system before backup the file-system
# mongo-ruby-driver version > 1.10.0

require 'mongo'
require 'fileutils'
require 'date'

include Mongo
include BSON

# the members of replcation-set
# test mongodb server version 2.6.0
# host = "192.168.11.51"

# The port of members
# If the port is 27017 by default then otherport don't need to assignment
# otherport = ""
# port = otherport.length != 0 ? otherport : MongoClient::DEFAULT_PORT

# opts = {:pool_size => 5, :pool_timeout => 10}
# Create a new connection
# client = MongoClient.new(host, port, opts)

uri_string = "mongodb://caoqing:[email protected]:27017/admin"
client = MongoClient.from_uri(uri = "#{uri_string}")
db = client['admin']

# fsync and lock the database
cmd = OrderedHash.new
cmd[:fsync] = 1
cmd[:lock] = true
# p cmd
db.command(cmd)

# datafile path
d = "/var/lib/mongo"

# dir = Dir.new("#g8kyieogoc6")
# entries = dir.entries
# entries.delete_if { |entry| entry =~ /^./}
# convert the relative path to the full path
# entries.map! { |entry| File.join(dir.path, entry) }
# maintain only the type of file
# entries.delete_if { |entry| !File.file?(entry) }
# p entries

start = Date.today.to_s
prev = (Date.today - 7).to_s

dest = "/backup/#{start}"
sour = "/backup/#{prev}"

FileUtils.rm_rf("#{sour}") if File::exist?("#{sour}")

Dir.mkdir("#{dest}", 0755) unless File::exist?("#{dest}")

FileUtils.cp_r Dir.glob("#g8kyieogoc6/**"), dest if client.locked?

puts "*" * 20
puts "	backup complete"
puts "*" * 20

# DB::SYSTEM_COMMAND_COLLECTION
# unlock the database
db["$cmd.sys.unlock"].find_one
client.close

延伸 · 閱讀

精彩推薦
  • RubyRuby環(huán)境下安裝使用bundler來管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態(tài)語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象

    Ruby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象

    這篇文章主要介紹了Ruby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來總結(jié)一下 ...

    可樂加糖4762020-04-12
  • RubyRuby設(shè)計模式編程中使用Builder建造者模式的實例

    Ruby設(shè)計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設(shè)計模式編程中使用Builder建造者模式的實例,建造者模式將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數(shù)據(jù)是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當(dāng)我們在最高層而不是在一個類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
主站蜘蛛池模板: 日本不卡视频免费的 | 2021日本三级理论影院 | 2022国产麻豆剧传媒剧情 | 调教女高中生第3部分 | 日本色吧| 日本人泡妞18xxⅹ | 国产黄频| 极品丝袜乱系列在线阅读 | 国产剧情在线播放 | 惊弦45集免费看 | 国产一区二区三区欧美 | 无遮掩60分钟从头啪到尾 | 无限好资源免费观看 | 久久久久青草大香线综合精品 | 黑人粗长巨茎小说 | 国产亚洲精品久久yy5099 | 日本高清视频在线免费观看 | 描写细腻的高h肉 | 免费成年网站 | 无人知晓小说姜璟免费阅读 | 挺进白嫩老师下面视频 | 久久成人国产精品一区二区 | 日韩欧美亚洲天堂 | 亚洲天堂男人的天堂 | 牛牛色婷婷在线视频播放 | poronovideos极度残酷 | 亚州精品视频 | 亚洲欧美成人综合久久久 | java hd国产高清 | 国产一区二 | 免费看男人使劲躁女人小说 | 午夜福利电影网站鲁片大全 | www.毛片在线观看 | haodiaocao的视频这里看 | 热久久99精品这里有精品 | 欧美性色黄大片四虎影视 | 风间由美被义子中文字幕 | 4455在线 | 欧美日韩一区二区三区在线观看 | 美女扒开胸罩露出奶了无遮挡免费 | 水野朝阳厨房系列在线观看 |