Rails和MongoDB的笔记

首先

最近我在Google Cloud Storage上进行了验证,但由于某些基础设施要求的出现,所以决定尝试使用其他NoSQL数据库来实现。
这次我会用Rails + MongoDB来构建一个简单的应用程序,从安装到构建的过程作为备忘录记录下来。

将MongoDB安装在Ubuntu上。

安装

$cat /etc/lsb-release
>DISTRIB_ID=Ubuntu
>DISTRIB_RELEASE=14.04

$ sudo apt-get install ntp
$ sudo apt-get install mongodb
$ mongo -version
>MongoDB shell version: 2.4.9

开放端口

sudo ufw status
sudo ufw allow 27017 <-Mongodbで使う
sudo ufw allow 27018 <-Mongodbのwebconsoleで使う
sudo ufw allow 28017 <-Mongodbのwebconsoleで使う
//許可ポート以外閉じる
sudo ufw default deny

允许MongoDB的外部IP访问

$ vim /etc/mongodb.conf

//コメントアウトする
#bind_ip = 127.0.0.1
#port = 27017
bind_ip = All

//Webインターフェースを有効化
# Disable the HTTP interface (Defaults to localhost:27018).
#nohttpinterface = true
nohttpinterface = false

启动数据库

$ sudo service mongodb start
or
$ sudo service mongodb restart

连接到Web控制台。

http://[IP]:28017

创建Rails环境

创建rails模板

$ rails -v
>Rails 5.1.4

$ mkdir rails-mongo-demo
$ cd rails-mongo-demo/
$ rails new rails-mongo-demo --skip-active-record
$ cd rails-mongo-demo/

在GemFile中添加内容。

gem 'mongoid'

安装捆绑包

bundle install

创建config

$ bundle exec rails g mongoid:config


mongoid.ymlにhostsを設定する>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
development:
  clients:
    default:
      hosts:
        - 192.168.0.1:27017

使用脚手架创建一个Cat。

$ bundle exec rails generate scaffold Cat name:string age:integer

一时设置CSRF

class ApplicationController < ActionController::Base
  #protect_from_forgery with: :exception
  protect_from_forgery with: :null_session
end
または
class CatsController < ApplicationController
  protect_from_forgery :except => [:create]

我试着发帖

curl -d 'cat[name]=abcdefg&cat[age]=11' http://localhost:3000/cats
---------------------------------------------
#mongoに接続

$ mongo

> show dbs
rails_mongo_demo_development  0.203125GB

> use rails_mongo_demo_development
> show collections
cats

//インデックス
db.rails_mongo_demo_development.getIndexes();

//全部削除
db.cats.remove();

//データ取得 find_all的な
db.cats.find()

//データ取得 find_by的な
db.cats.find({"name":"Reon"})
---------------------------------------------
广告
将在 10 秒后关闭
bannerAds