Qual è il modo migliore per parlare a un database durante l'utilizzo di Sinatra?
Domanda
A quanto mi risulta, il quadro Sinatra, a differenza di Rails, non fornisce un ORM. In tal caso, come si fa a parlare con un DB in un'app Sinatra? O è Sinatra solo per le applicazioni che non utilizzano un DB?
Soluzione
Se ti piace ActiveRecord, usare quella. O qualcos'altro. DataMapper, per esempio. Per AR con SQLite, questo funziona:
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
Altri suggerimenti
Se stai usando Sinatra, non posso consigliare DataMapper vivamente. Ho un paio di applicazioni Rails, dove mi sono bloccato con ActiveRecord, e sto costantemente maledicendo le sue carenze e difetti di progettazione. Se siete su Sinatra, DataMapper è una scelta molto pratica.
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
E 'a voi come comunicare con un database, è possibile scegliere uno dei due ORM o qualche adattatore NoSQL. Ci sono molte opzioni disponibili, alcune delle quali sono state fatte apposta per Sinatra:
Per esempio, non v'è Sinatra ActiveRecord Extension
Originariamente creato da Blake Mizerany, creatore di Sinatra
Si estende Sinatra con metodi di supporto ActiveRecord e compiti Rake
Un'altra opzione è Sinatra Sequel di estensione .
Questa piccola estensione aggiunge configurazione del database, le migrazioni, e gli adattatori Sequel a destra in Sinatra.
O Sinatra-Redis, o Sinatra-Mongo, e così via. Basta cercare quello che vuoi.
Ma si può anche utilizzare liberamente qualsiasi libreria indipendente, controlla la Sinatra Ricette sui database , in cui è elencato un paio di esempi di come utilizzare mapper di database popolari con Sinatra. Anche se si è detto lì che la pratica suggerita per questo sta usando DataMapper, ho il sospetto che questo è un semplice preferenza, perché nulla in Sinatra stesso suggerisce questo.