はじめに(Sinatra)
項目一覧
新しいアプリケーション
このセクションでは、データアクセス用に Mongoid を使用して新しい Sinatra アプリケーションを作成する方法を説明します。 このプロセスは、Ruby on Rails を使用していない他の Ruby アプリケーションでも同様です。
このアプリケーションの完全なソースコード は mongoid-demoGithub リポジトリ で入手できます 。
Git リポジトリの作成
必須ではありませんが、アプリケーション用に Git リポジトリを作成することをお勧めします。
git init blog cd blog
このチュートリアルに従い、変更をコミットします。
Gemfile の作成
次の内容で Gemfile
という名前のファイルを作成します。
source 'https://rubygems.org' gem 'sinatra' gem 'mongoid' gem 'puma'
依存関係のインストール
以下のコマンドを実行して、依存関係をインストールします。
gem install bundler bundle install
このコマンドはGemfile.lock
という名前のファイルを生成し、Git リポジトリにコミットすることを推奨します。
MongoDB をローカルで実行
MongoDB を使用してローカルで開発するには、 MongoDB をダウンロードしてインストールします。
MongoDB をインストールして実行したら、配置を指すようにconfig/mongoid.yml
という名前のファイルを作成します。 たとえば、スタンドアロンのmongod
をデフォルト ポートで起動した場合、次の内容が適切です。
development: clients: default: database: blog_development hosts: - localhost:27017 options: server_selection_timeout: 1
MongoDB Atlas の使用
MongoDB をダウンロードしてローカルにインストールして実行する代わりに、無料の MongoDB Atlas アカウントを作成し、 Atlas に無料の MongoDB クラスターを作成できます。 クラスターが作成されたら、クラスターページに接続する手順に従って URI を取得します。 Ruby ドライバー2.5以降の形式を使用します。
次の内容でconfig/mongoid.yml
という名前のファイルを作成し、URI をクラスターの実際の URI に置き換えます。
development: clients: default: uri: mongodb+srv://user:pass@yourcluster.mongodb.net/blog_development?retryWrites=true&w=majority options: server_selection_timeout: 5
基本的なアプリケーション
次の内容でapp.rb
という名前のファイルを作成します。 最初に、一部の では次のものが必要です。
require 'sinatra' require 'mongoid'
Mongoid 構成ファイル をロード、Mongoid を構成します。 これは Mongoid を Rails で使用すると自動的に行われますが、Sinatra で Mongoid を使用しているため、これを自分で行う必要があります。
Mongoid.load!(File.join(File.dirname(__FILE__), 'config', 'mongoid.yml'))
これで、いくつかのモデルを定義できます。
class Post include Mongoid::Document field :title, type: String field :body, type: String has_many :comments end class Comment include Mongoid::Document field :name, type: String field :message, type: String belongs_to :post end
... いくつかのルートを追加します。
get '/posts' do Post.all.to_json end post '/posts' do post = Post.create!(params[:post]) post.to_json end get '/posts/:post_id' do |post_id| post = Post.find(post_id) post.attributes.merge( comments: post.comments, ).to_json end post '/posts/:post_id/comments' do |post_id| post = Post.find(post_id) comment = post.comments.create!(params[:comment]) {}.to_json end
アプリケーションを実行する
アプリケーションを起動します。
bundle exec ruby app.rb
curl 経由でいくつかのリクエストを試します。
curl http://localhost:4567/posts => [] curl -d 'post[title]=hello&post[body]=hello+world' http://localhost:4567/posts => {"_id":{"$oid":"5d8151ec96fb4f0ed5a7a03f"},"body":"hello world","title":"hello"} curl http://localhost:4567/posts => [{"_id":{"_id":{"$oid":"5d8151ec96fb4f0ed5a7a03f"},"body":"hello world","title":"hello"}] curl -d 'comment[name]=David&comment[message]=I+like' http://localhost:4567/posts/5d8151ec96fb4f0ed5a7a03f/comments => {} curl http://localhost:4567/posts/5d8151ec96fb4f0ed5a7a03f => {"_id":{"$oid":"5d8151ec96fb4f0ed5a7a03f"},"title":"hello","body":"hello world","comments":[{"_id":{"$oid":"5d8157ac96fb4f20c5e45c4d"},"message":"I like","name":"David","post_id":{"$oid":"5d8151ec96fb4f0ed5a7a03f"}}]}
既存のアプリケーション
既存の Sinatra アプリケーションで Mongoid の使用を開始するには、手順は基本的に新しいアプリケーションの場合と同じです。
mongoid
の依存関係をGemfile
に追加します。mongoid.yml
構成ファイルを作成します。構成ファイル をロードし、アプリケーションで Mongoid を構成します。
Mongoid モデルを定義します。