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

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

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

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

2020-05-11 10:24kristy_yy Ruby

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

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

1.創建項目

創建項目時不再使用rails active_record支持

rails new todo -O

2.我們將要使用MongoMapper來驅動MongoDB到Rails

編輯GemFile,增加下面的內容

gem"mongo_mapper"

然后  執行 bundle install 安裝gem

bundle install

3.添加數據庫鏈接

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

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


MongoMapper.database ='todo'#通過指定Rails運行環境參數,我們可以在不同的運行環境下創建互不干擾的數據,為了簡單起見,沒有為不同的環境指定不同的數據

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命令來生成頁面、控制器和模型層文件(個人還是喜歡自己手動創建,這里為了演示方便)

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

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

classProject

  include MongoMapper::Document

  key:name,String

end

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

5.數據查看

可以通過命令mongo進入mongodb數據庫進行數據的查詢

mongo //進入數據庫

use todo //切換庫

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


 
6.其他

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

validates_presence_of:name

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

classProject

  include MongoMapper::Document

  key:name,String,:required=>true

  key:priority,Integer

end

表之間的關聯對于MongoDB這里稍微有點區別,我們需要ObjectId類型來存儲所有id。

至于,處理不同表之前的關聯,我們可以像ActiveRecord一樣定義belongs_to,當然,稍微有點不同,在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環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

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

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

    簡要說明Ruby中的迭代器

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

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

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

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

    腳本之家2472020-04-20
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

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

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

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

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

    Ruby迭代器的7種技巧分享

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

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

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

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

    ruby教程網2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

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

    ruby教程網3572020-04-08
主站蜘蛛池模板: fuqer日本老师| 国产成人精品一区二区 | 免费导航 | yin娃sao货调教情趣用品店 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 石原莉奈adn093店长未婚妻 | 欧美在线观看视频一区 | 欧美精品黑人巨大在线播放 | 国产成人免费视频 | 五月天在线视频观看 | 关晓彤被调教出奶水 | 91影视永久福利免费观看 | 亚洲国产欧美目韩成人综合 | 大陆国语自产精品视频在 | 午夜理论片YY4399影院 | 欧美综合精品一区二区三区 | 日本偷拍xxxxxxww| 小鸟酱在线看 | 国产思妍小仙女一二区 | 亚洲444777KKK在线观看 | www.一级片.com| 国产动作大片 | 2018高清国产一道国产 | 黑人性xxxⅹxxbbbbb | 久久精品视频在线看 | 97色伦在线观看 | 我要看免费毛片 | 日本在线小视频 | 草草视频在线观看 | 97影院秋霞国产精品 | 免费永久观看美女视频网站网址 | 韩国三级大全 | 精品视频免费在线观看 | 亚洲区视频在线观看 | 第一次处破女18分钟 | 亚洲精品综合一区二区 | 全日本爽视频在线 | 日韩高清在线免费观看 | 国产在线乱子伦一区二区 | 男女乱淫真视频播放网站 | 国产suv精品一区二区四区三区 |