Quelle est la meilleure façon de parler à une base de données en utilisant Sinatra?

StackOverflow https://stackoverflow.com/questions/777724

  •  13-09-2019
  •  | 
  •  

Question

Si je comprends bien, le cadre Sinatra, contrairement à Rails, ne fournit pas un ORM. Dans ce cas, comment voulez-vous parler à un DB dans une application Sinatra? Ou est-Sinatra que pour les applications qui n'utilisent pas un DB?

Était-ce utile?

La solution

Si vous aimez ActiveRecord, utiliser. Ou autre chose. DataMapper, par exemple. Pour AR avec SQLite, cela fonctionne:

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

Autres conseils

Si vous utilisez Sinatra, je ne peux pas recommander DataMapper assez. J'ai quelques Rails applications où je suis coincé avec ActiveRecord, et je suis constamment maudire ses lacunes et des défauts de conception. Si vous êtes sur Sinatra, DataMapper est un choix très pratique.

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

Il est à vous comment communiquer avec une base de données, vous pouvez choisir l'un des ORM ou un adaptateur NoSQL. Il existe de nombreuses options disponibles, certains d'entre eux ont été faites spécialement pour Sinatra:

Par exemple, il est Sinatra ActiveRecord Extension
A l'origine créé par Blake Mizerany, créateur de Sinatra
Il étend Sinatra avec des méthodes d'aide ActiveRecord et tâches Rake

Une autre option est Sinatra Sequel Extension.
Cette petite extension ajoute la configuration de base de données, les migrations et les cartes Sequel droite dans Sinatra.

Ou sinatra-Redis, ou sinatra-mongo, et ainsi de suite. Il suffit de chercher ce que vous voulez.

Mais vous pouvez aussi bien utiliser librement une bibliothèque indépendante, consultez le Sinatra Recettes sur les bases de données , où est énuméré quelques exemples de la façon d'utiliser la base de données cartographes populaires avec Sinatra. Bien qu'il soit mentionné là que la pratique suggérée pour cela utilise DataMapper, je pense que cela est une simple préférence, parce que rien dans Sinatra lui-même suggère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top