Overview
在本指南中,您可以学习;了解如何创建使用 Sinatra 作为 Web框架的 Mongoid Web应用程序。Sinatra 是一种领域特定语言(DSL),用于在Ruby中创建 Web 应用程序。Sinatra 应用程序设立简单,并且可以提供比其他框架更快的请求处理。
本教程中的应用程序由以下各层组成:
数据库层:MongoDB提供数据存储和检索。
应用程序层:Sinatra 处理HTTP请求、路由和逻辑处理。
表示层:嵌入式Ruby模板在网页上渲染餐厅数据。
提示
要学习;了解如何将 Mongoid 集成到现有应用程序中,请参阅 Add Mongoid to an Existing Application(将 Mongoid 添加到现有应用程序)指南。
为何将MongoDB与 Mongoid 和 Sinatra 一起使用?
通过将MongoDB与 Mongoid 和 Sinatra 集成,您可以使用 Mongoid 的对象文档映射器 (ODM) 与 MongoDB 灵活的 document model 进行交互。Mongoid 提供了 Rails 的 Active Record ORM 的轻量级替代方案,您可以利用 MongoDB 的模式灵活性,同时使用 Sinatra 的极简方法轻松控制数据的建模和显示方式。
快速入门教程
本教程向您展示如何构建使用Ruby和 Sinatra 的 Web应用程序。该应用程序访问示例餐厅数据,查询数据,并在本地托管站点上显示结果。本教程还包括有关连接到MongoDB Atlas上托管的MongoDB 集群以及访问和显示数据库数据的说明。
设置您的项目
按照本节中的步骤安装项目依赖项,创建Atlas集群,并设立应用程序结构。
创建 MongoDB Atlas 集群。
MongoDB Atlas是一项完全托管云数据库服务,用于托管MongoDB部署。如果您没有MongoDB 部署,可以通过完成MongoDB入门教程来免费创建MongoDB 集群。 MongoDB入门教程还演示了如何将示例数据集加载到集群中,包括本教程中使用的sample_restaurants 数据库。
要连接到MongoDB集群,您必须使用连接 URI。学习如何检索连接 URI,请参阅MongoDB入门教程的添加连接字符串部分。
重要
将连接string保存在安全位置。
配置后端
设置项目结构和依赖项后,请按照本节中的步骤连接到MongoDB并设立数据模型。
配置MongoDB连接。
在 my-sinatra-app目录中,创建 config 子目录。然后,在此子目录中创建一个名为 mongoid.yml 的文件。
将以下代码粘贴到mongoid.yml文件:
development: clients: default: uri: <connection string>
将 <connection string> 占位符替换为您在上一步中保存的连接 URI。确保 URI 包含 sample_restaurants数据库名称。
配置前端
设置数据层后,请按照本节中的步骤为用户界面创建模板。
创建主布局模板。
在 my-sinatra-app目录中,创建一个名为 views 的子目录。
然后,在 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>
此文件是嵌入式Ruby (ERB) 模板。这些模板包括带有嵌入式Ruby代码的 HTML,用于生成动态 HTML 内容。
创建餐厅列表视图。
在 views 子目录中,创建名为 index.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>
此视图文件在应用程序用户界面中以网格布局显示所有餐厅。
创建过滤后的视图。
在 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>
此视图文件显示自定义 browse 路线中的餐厅,该路线筛选出位于皇后区且名称中包含 "Moon" 的餐厅。
运行应用程序
最后,按照本节中的步骤运行Web应用程序并使用浏览器界面探索餐厅数据。
启动 Sinatra应用程序。
导航到项目目录并运行以下命令:
bundle exec ruby app.rb
此命令在端口 4567(Sinatra 的默认端口)上启动 Web服务器。如果成功,命令输出将类似于以下示例:
[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
打开 Web应用程序。
在网络浏览器中打开http://localhost:4567。初始登陆页面按照数据库中出现的顺序显示 sample_restaurants.restaurants集合中的所有餐厅:

然后,单击 Browse Filtered Restaurants 链接查看皇后区名称中包含 "Moon" 的餐厅:

恭喜您完成 Sinatra 快速入门教程!完成这些步骤后,您就有了一个Ruby和 Sinatra Web应用程序,它连接到MongoDB 部署,对示例餐厅数据运行查询,并在本地托管的 Web 界面上显示结果。
其他资源
要学习;了解有关Ruby、Sinatra、Mongoid 和MongoDB的更多信息,请查看以下资源: