Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

Integrar Mongoid com Sinatra

Neste guia, você pode aprender como criar um aplicativo web Mongoid que utiliza Sinatra como framework web. Sinatra é uma linguagem específica de domínio (DSL) para criar aplicativos da web em Ruby. Os aplicativos Sinatra são simples de configurar e podem fornecer um processamento de solicitações mais rápido do que outras estruturas.

O aplicativo neste tutorial consiste nas seguintes camadas:

  • Camada de banco de dados: o MongoDB fornece armazenamento e recuperação de dados.

  • Camada de aplicativo: o Sinatra lida com solicitações HTTP, roteamento e processamento lógico.

  • Camada de apresentação: modelos Ruby incorporados renderizam dados de restaurantes em páginas da web.

Dica

Para saber como integrar o Mongoid a um aplicação existente, consulte o guia Adicionar Mongoid a um aplicativo existente.

Ao integrar o MongoDB com o Mongoid e o Sinatra, você pode usar o Object-Document Mapper (ODM) do Mongoid para interagir com o modelo de documento flexível do MongoDB. O Mongoid fornece uma alternativa leve ao ORM do Active Record do Rails, e você pode aproveitar a flexibilidade de esquema do MongoDB enquanto usa a abordagem mínima do Sinatra para controlar facilmente como seus dados são modelados e exibidos.

Este tutorial mostra como criar um aplicativo da web que utiliza Ruby e Sinatra. O aplicativo acessa dados de restaurantes de amostra, query os dados e exibe os resultados em um site hospedado localmente. O tutorial também inclui instruções para se conectar a um cluster MongoDB hospedado no MongoDB Atlas e acessar e exibir dados de seu banco de dados.

Siga as etapas nesta seção para instalar as dependências do projeto, criar um cluster do Atlas e configurar a estrutura do aplicativo.

1

Antes de criar o aplicativo Quick Start, instale o seguinte software em seu ambiente de desenvolvimento:

Pré-requisitos
Notas

Ruby

Use a versão 3.1 ou posterior.

Este é um gerenciador de pacote para Ruby.

Editor de código

Use o editor de código de sua escolha.

Aplicativo de terminal e shell

Para usuários do MacOS, use o Terminal ou um aplicativo semelhante. Para usuários do Windows, use o PowerShell.

2

O MongoDB Atlas é um serviço de banco de dados em nuvem gerenciado que hospeda suas implantações do MongoDB. Se você não tiver uma implementação do MongoDB, poderá criar um cluster do MongoDB gratuitamente concluindo o tutorial de Introdução ao MongoDB. O tutorial de Introdução ao MongoDB também demonstra como carregar conjuntos de dados de exemplo em seu cluster, incluindo o banco de dados sample_restaurants usado neste tutorial.

Para se conectar ao cluster MongoDB, você deve usar um URI de conexão. Para aprender como recuperar seu URI de conexão, veja a seção Adicionar sua string de conexão do tutorial de Introdução ao MongoDB.

Importante

Salve sua string de conexão em um local seguro.

3

Ao se conectar a um Atlas cluster, você deve especificar o banco de dados com o qual deseja interagir como o banco de dados padrão em sua string de conexão. Você deve adicionar o nome do banco de dados à sua string de conexão após o nome do host e antes das opções de conexão.

O exemplo a seguir especifica o banco de dados de destino sample_restaurants em uma string de conexão de exemplo :

mongodb+srv://user0:pass123@mongo0.example.com/sample_restaurants?retryWrites=true&w=majority

A string de conexão de amostra inclui o banco de dados após o nome de host mongo0.example.com e antes das opções de conexão retryWrites e w.

4

Execute os seguintes comandos para criar um novo diretório de aplicativo denominado my-sinatra-app e navegue até ele:

mkdir my-sinatra-app
cd my-sinatra-app
5

Todos os aplicativos Ruby devem ter um Gemfile que liste as gems necessárias. Execute o seguinte comando para criar um Gemfile em seu aplicação:

touch Gemfile

Em seguida, execute os seguintes comandos para adicionar as gems necessárias ao Gemfile e instalá-las:

bundle add mongoid sinatra rackup webrick
bundle install

Após configurar a estrutura e as dependências do projeto, siga as etapas desta seção para se conectar ao MongoDB e configurar seus modelos de dados.

1

No seu diretório my-sinatra-app, crie um subdiretório config. Em seguida, crie um arquivo neste subdiretório chamado mongoid.yml.

Cole o código abaixo no arquivo mongoid.yml :

my-sinatra-app/config/mongoid.yml
development:
clients:
default:
uri: <connection string>

Substitua o espaço reservado <connection string> pelo URI de conexão que você salvou em uma etapa anterior. Certifique-se de que o URI inclua o nome do banco de dados sample_restaurants.

2

No seu diretório my-sinatra-app, crie um arquivo chamado app.rb. Cole o seguinte conteúdo no arquivo app.rb para carregar as gems necessárias e seu arquivo de configuração:

my-sinatra-app/app.rb
require 'sinatra'
require 'mongoid'
Mongoid.load!(File.join(File.dirname(__FILE__), 'config', 'mongoid.yml'))
3

No arquivo app.rb, crie um modelo chamado Restaurant adicionando o seguinte código:

my-sinatra-app/app.rb
class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
end

O modelo Restaurant representa a coleção restaurants no banco de dados sample_restaurants . Define name, cuisine e borough campos para armazenar dados de restaurante.

4

No arquivo app.rb, adicione as seguintes rotas para exibir dados do restaurante:

my-sinatra-app/app.rb
get '/' do
@restaurants = Restaurant.all
erb :index
end
get '/browse' do
@restaurants = Restaurant
.where(name: /Moon/i).and(borough: "Queens")
erb :browse
end

A rota / exibe todos os restaurantes, enquanto as consultas de rota /browse para restaurantes no Queins que têm "Moon" em seu nome usando uma correspondência insensível a maiúsculas e minúsculas.

Após configurar a camada de dados, siga as etapas nesta seção para criar modelos para a interface do usuário.

1

No seu diretório my-sinatra-app, crie um subdiretório denominado views.

Em seguida, crie um arquivo no subdiretório views chamado layout.erb e cole o seguinte código:

my-sinatra-app/views/layout.erb
<!DOCTYPE html>
<html>
<head>
<title>Restaurant Directory</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #a8d5ba;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.nav {
text-align: center;
margin-bottom: 20px;
}
.nav a {
text-decoration: none;
color: #6a9bd2;
margin: 0 10px;
font-size: 16px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 10px;
}
.restaurant-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
margin-top: 20px;
}
.restaurant-card {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
border: 1px solid #ddd;
}
.restaurant-card h3 {
margin-top: 0;
color: #333;
}
.cuisine-tag {
background: #4a9d5f;
color: white;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<h1>Restaurant Directory</h1>
</div>
<div class="nav">
<a href="/">All Restaurants</a>
<a href="/browse">Browse Filtered Restaurants</a>
</div>
<div class="container">
<%= yield %>
</div>
</body>
</html>

Este arquivo é um modelo Ruby incorporado (ERB). Esses modelos incluem HTML com código Ruby incorporado usado para gerar conteúdo HTML dinâmico.

2

No subdiretório views, crie um arquivo chamado index.erb e cole o seguinte código:

my-sinatra-app/views/índice.erb
<h2>All Restaurants</h2>
<p>Total restaurants: <%= @restaurants.count %></p>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

Este arquivo de visualização exibe todos os restaurantes em um layout de grade na interface do usuário do aplicativo.

3

No subdiretório views, crie um arquivo chamado browse.erb e cole o seguinte código:

my-sinatra-app/views/browse.erb
<h2>Browse Restaurants</h2>
<p>Restaurants in Queens with "Moon" in the name</p>
<h3>Filtered Results</h3>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

Este arquivo de visualização exibe os restaurantes da rota personalizada browse, que filtra restaurantes no Queins que têm "Moon" em seu nome.

Por fim, siga as etapas desta seção para executar seu aplicativo da web e explorar os dados do restaurante usando a interface do navegador.

1

Navegue até o diretório do projeto e execute o seguinte comando:

bundle exec ruby app.rb

Este comando inicia um servidor web na porta 4567, a porta padrão do Sinatra. Se for bem-sucedida, a saída do comando será semelhante ao exemplo a seguir:

[2024-10-01 12:36:49] INFO WEBrick 1.8.2
[2024-10-01 12:36:49] INFO ruby 3.2.5 (2024-07-26) [arm64-darwin23]
== Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2024-10-01 12:36:49] INFO WEBrick::HTTPServer#start: pid=79176 port=4567
2

Abra http://localhost:4567 em seu navegador da web. A página de destino inicial exibe todos os restaurantes na coleção sample_restaurants.restaurants, na ordem em que aparecem no banco de dados:

A página web que exibe todos os restaurantes

Em seguida, clique no link Browse Filtered Restaurants para visualizar os restaurantes no Queins que têm "Moon" em seu nome:

A página web que exibe restaurantes filtrados

Parabéns por concluir o tutorial Início Rápido do Sinatra! Depois de concluir essas etapas, você terá um aplicativo web Ruby e Sinatra que se conecta à implantação do MongoDB, executa queries em dados de restaurantes de amostra e exibe os resultados em uma interface web hospedada localmente.

Para saber mais sobre Ruby, Sinatra, Mongoid e MongoDB, consulte os seguintes recursos:

Dica

Outros tutoriais de estrutura

Se você preferir usar o Rails como seu framework web, consulte o guia Integrar Mongoid com Ruby on Rails.

Voltar

Introdução: Ruby on Rails

Nesta página