何故 mongodb
引き継ぎ案件だからだよ
せっかくなので最新の Ruby / Rails に触れようということでセットアップしていきます。
Ruby
$ rbenv install 2.6.2
Rails
$ mkdir project
$ cd project
$ bundle init
$ bundle install --path vendor/bundle
$ bundle exec rails new . --skip-bundle --skip-active-record
MongoDB
設定ファイルをジェネレート
$ bundle exec rails g mongoid:config
DockerComposeの設定
$ vim docker-compose.yml
docker-compose.yml
version: '2'
networks:
bridge:
driver: bridge
services:
mongodb:
image: mongo:latest
container_name: mongodb
environment:
- 'MONGODB_USER=root'
- 'MONGODB_PASS=password'
volumes:
- 'mongodb-data:/data/db'
ports:
- '27017:27017'
command: mongod --smallfiles
mongo-express:
container_name: mongo-express
links:
- 'mongodb:mongo'
ports:
- '8081:8081'
environment:
- 'ME_CONFIG_OPTIONS_EDITORTHEME=ambiance'
- 'ME_CONFIG_BASICAUTH_USERNAME=root'
- 'ME_CONFIG_BASICAUTH_PASSWORD=password'
image: mongo-express
volumes:
mongodb-data: {}
$ docker-compose up -d
これで http://localhost:8081/ へアクセスすると以下のような画面が開きます。
あとは適当にデータベースを選んで、 Import
からbsonをインポートすればすぐ使えます。
これは非常に便利かつ優しいインターフェイスでした。
Railsのジェネレータをmongoidに変更
$ vim config/application.rb
config/application.rb
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
config.generators do |g|
g.orm :mongoid
end
end
コレクション名がRailsの命名規約に則っていない場合
やんごとなき理由により、バックアップ等からデータを復元してそのまま使う場合、
コレクション名がキャメルケースだったり単数形だったりしてモデルからコレクション名を指定したいニーズが出てきます。
そんな時は store_in
を使いましょう。(mongoid 7.0.2)
app/models/image.rb
class Image
include Mongoid::Document
store_in collection: 'Image'
field :original, type: String
field :large, type: String
field :medium, type: String
field :small, type: String
end
DockerからMongoにつなぎたいという時のTips
$ docker-compose exec mongodb bash
root@c01225e4e2b6:/# mongo admin
MongoDB shell version v4.0.6
> show dbs
admin 0.000GB
hogehogehogeho 0.042GB
config 0.000GB
local 0.000GB
最後に
簡単ですが、これでモデルを利用できるようになりました。
あとはコントローラやビューを組み込むだけで動きそうです。
MongoDBを使うぐらいなんで、そこまで大きなプロジェクトではないと思います。
https://getbootstrap.com/ を使うとさくっと体裁を整えられて良いですね。