web-dev-qa-db-ja.com

Sinatraの使用中にデータベースと通信するための最良の方法は何ですか?

私が理解しているように、SinatraフレームワークはRailsとは異なり、ORMを提供しません。その場合、SinatraアプリでDBとどのように通信しますか?それとも、SinatraはDBを使用しないアプリ専用ですか?

33
Chris Collins

ActiveRecordが好きなら、それを使ってください。または、他の何か。たとえば、データマッパー。 SQLiteを使用したARの場合、これは機能します。

require 'rubygems' # may not be needed, depending on platform
require 'sinatra'
require 'active_record'

class Article < ActiveRecord::Base
end

get '/' do
  Article.establish_connection(
    :adapter => "sqlite3",
    :database => "hw.db"
  )
  Article.first.title
end
29
Mike Woodhouse

Sinatraを使用している場合、私はお勧めできません DataMapper 十分に。私はActiveRecordで立ち往生しているいくつかのRailsアプリを持っており、その欠点と設計上の欠陥を絶えず呪っています。Sinatraを使用している場合、DataMapperは非常に実用的な選択肢です。

require "rubygems"
require "sinatra"
require "datamapper"

DataMapper.setup(:default, "sqlite3::memory:")

class Post
  include DataMapper::Resource

  property :id,    Integer, :serial => true
  property :title, String
end

Post.auto_migrate!
first_post = Post.new
first_post.title = "First!"
first_post.save

get "/" do
  Post.get(1).title
end
60
Bob Aman

データベースとの通信方法はユーザー次第です。ORMまたはNoSQLアダプターのいずれかを選択できます。利用可能なオプションはたくさんありますが、そのうちのいくつかはシナトラのために特別に作られました。

たとえば、 Sinatra ActiveRecord Extension があります
元々はシナトラの作成者であるブレイクミゼラニーによって作成されました
ActiveRecordヘルパーメソッドとRakeタスクでSinatraを拡張します

別のオプションは Sinatra Sequel Extension です。
この小さな拡張機能は、データベース構成、移行、およびSequelアダプターをSinatraに直接追加します。

またはsinatra-redis、またはsinatra-mongoなど。欲しいものを検索するだけです。

ただし、独立したライブラリを自由に使用することもできます。 データベースのSinatraレシピ を確認してください。ここには、Sinatraで人気のあるデータベースマッパーを使用する方法の例がいくつかリストされています。これについて提案されている方法はDataMapperを使用しているとそこに記載されていますが、Sinatra自体にはこれを示唆していないため、これは単なる好みであると思われます。

0
user