Ruby on Rails 프레임워크 프로그램이 MongoDB를 연결하는 자습서
1. 항목 만들기
프로젝트를 만들 때 rails active_ 를 사용하지 않습니다.레코드 지원
rails new todo -O
2. 우리는 MongoMapper를 사용하여 MongoDB를 Rails로 구동할 것이다GemFile 편집, 다음 내용 추가
gem"mongo_mapper"
그리고 bundle 설치 실행gem
bundle install
3. 데이터베이스 링크 추가config/initializer 아래에 몬고를 새로 만듭니다.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
우리는 몬고를 데이터베이스로 사용하기 때문이다.그러면 우리는 Active Record의 모델을 Mongo Mapper의 유형으로 바꾸어야 한다. 즉, 계승 관계를 Active Record::Base에서 Mongo Mapper:::Document로 바꾸어야 한다.우리는 키라는 방법을 사용하여 이 MongoMapper의 필드 속성을 표시합니다.우리의 속성은name이고 이 필드의 형식인 String을 더하면 다음과 같이 정의됩니다.
classProject
include MongoMapper::Document
key:name,String
end
이상의 수정을 통해 우리는 이미 모든 추가, 업데이트, 삭제와 목록을 가지고 있다5. 데이터 보기
명령mongo를 통해mongodb 데이터베이스에 들어가 데이터를 조회할 수 있습니다
mongo //
use todo //
db.projects.find() //
6. 기타Mongo Mapper와 Active Record는 동일합니다.심지어 Mongo Mapper는 다음과 같이 ActiveRecord를 지원합니다.
validates_presence_of:name
MongoDB에 schema-less (데이터 버전 기록) 가 없기 때문에 우리는 모델의 속성을 쉽게 추가하고 변경할 수 있으며,migrations 작업을 수행할 필요가 없습니다.예를 들어 priority의 속성을 추가해야 합니다. 프로젝트 모델을 다음과 같이 수정하는 것만 필요합니다.
classProject
include MongoMapper::Document
key:name,String,:required=>true
key:priority,Integer
end
표 간의 관련성은 MongoDB에 약간의 차이가 있습니다. 모든 id를 저장하기 위해서는 ObjectId 형식이 필요합니다.서로 다른 테이블을 처리하기 전의 관련에 대해 우리는 ActiveRecord처럼 belongs_를 정의할 수 있다to, 물론 조금 다르다. 프로젝트에서 우리는 has_를 정의해야 한다many:tasks, Mongo Mapper에서 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("#{d}")
# 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("#{d}/**"), dest if client.locked?
puts "*" * 20
puts "\tbackup complete"
puts "*" * 20
# DB::SYSTEM_COMMAND_COLLECTION
# unlock the database
db["$cmd.sys.unlock"].find_one
client.close
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
새로운 UI의 Stripe Checkout을 Rails로 만들어 보았습니다.Stripe의 옛 디자인인 Stripe의 구현 기사는 많이 있습니다만, 지금 현재의 디자인에서의 도입 기사는 발견되지 않았기 때문에 투고합니다. Stripe의 체크아웃을 stripe의 문서라든지 stackoverfl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.