【备忘录】使用Rails+MongoDB的页面在Heroku环境中实现MongoDB连接的步骤

以下是关于创建Rails + MongoDB应用程序模板并部署到GitHub和Heroku的继续。
我们将在Heroku环境中,从Rails页面连接MongoDB并实现数据库的读写功能。

前提是指一个事件、理论或假设的基础或前提条件。

在上次的雏形创建中,源代码管理通过GitHub进行,同时还进行了部署到Heroku。

准备

此次我們將在本地和Heroku上使用MongoDB作為資料庫(由於Heroku僅官方支援PostgreSQL,所以使用MongoDB需要一些複雜的步驟)。此外,要從Rails使用MongoDB,需要使用OR映射器Mongoid。

MongoDB是一种开源的NoSQL数据库管理系统。

MongoDB是一种文档数据库。文档数据库是NoSQL数据库的一种,与关系型数据库不同,可以无需定义模式即可存储JSON数据。

Mongoid 是怎样一种东西?

MongoDB与Mongoid的关系。

Mongoid是MongoDB的对象关系映射器(虽然准确来说MongoDB是文档数据库,应该称为对象文档映射器…)。如果问到什么是对象关系映射器,那就会变得很复杂,建议查阅以下链接或者搜索一下…
http://e-words.jp/w/O-Rマッピング.html
它能够将Ruby对象和数据库(本例为MongoDB)关联起来,并提供保存和搜索等功能。

安装MongoDB

为了在本地或Heroku环境中通过终端确认数据库状态,请参考以下步骤安装MongoDB。

Gemfile=宝石文件

为了使用Bootstrap和MongoDB,需要编辑Gemfile并运行$bundle update。从Rubygems(https://rubygems.org)搜索Gem库,并将其添加到Gemfile中。

スクリーンショット 2018-12-22 17.47.08.png
# mongoid(DB:ローカル、heroku共にMongodbを使用することを想定)
group :development, :test, :production do
  gem 'mongoid', '~> 7.0', '>= 7.0.2'
end

修改Gemfile后执行bundle install。

$ bundle install

只要以 “vendor/bundle” 作为路径指定,下一次及以后的安装将会在此路径上进行。

准备在Heroku环境中连接MongoDB。

スクリーンショット 2018-12-24 15.33.20.png
スクリーンショット 2018-12-24 15.36.03.png

下一步,从终端中获取连接到Heroku的目标MongoDB的URI。

$ heroku config -a {アプリ名} |grep MONGODB_URI

将获得的URL设置在mongoid.yml文件中。

production:
 clients:
   default:
    uri: (取得したuri)
    options:
      connect_timeout: 15
  options:
    raise_not_found_error: false

要点:如果应用程序以及相关的数据库表为空的状态时,为了避免在从MongoDB获取记录时出现”Document not found”错误,需要将选项中的raise_not_found_error设置为false。生产环境和开发环境以及测试环境中,建议将raise_not_found_error设置为false(默认值为true)。

备注:这是根据理解进行的表达,可能有细微差异。

确认Heroku环境

现在我已经创建了一个与数据库进行读写的页面,并部署在Heroku环境中,以确认能够进行数据库的读写操作。

你可以使用下面的命令将应用部署到Heroku。

$git add -A
$git commit -m "Heroku環境からDB接続するで"
$git push heroku master

我将通过应用程序将数据写入到数据库中。

我创建了一个简易的公告板。当你发表帖子时,会进入下面的聊天记录(表)。
聊天记录名称:chat

フィールド(カラム) 型 UserName string Contents string
画面収録 2018-12-28 16.06.47.mov.gif

最后,我们将从终端中确认Heroku环境中的MongoDB。获取连接信息后,将连接到MongoDB并确认其中的数据库。

另外,您也可以从mLab的管理界面上确认命令。但是,请注意需要先确认Heroku的config中的用户名和密码。
下面是确认chat集合中是否存在记录的操作。


$ heroku config | grep MONGODB_URI
#適時読み替えてください 
mongodb://heroku_dxxxxx:pppppppppppppppppppppppp@dxxxxx.mlab.com:3xxxx/heroku_dxxxxx
          UserName      Password                 Address         Port  Database

#configをもとに書き換えてください
$ mongo <Address>:<Port>/<Database> -u <UserName> -p <Password>

> db.chats.find();
{ "_id" : ObjectId("Hoge"), "userName" : "test1", "comments" : "testcontents1", "updated_at" : ISODate("datedate"), "created_at" : ISODate("datedate") }

看起来Heroku成功连接到了数据库。

版本

这是当前版本时的情况。

サービス バージョン MongoDB v4.0.2 Mongoid v7.0.2

以下内容请参照中国母语进行改述,仅提供一种选项:

请参考

Rails+MongoDB的笔记
这里是我自己整理的一些内容。谢谢。

MongoDB作为全球第四大的NoSQL数据库,与关系型数据库(RDB)相比有哪些不同之处?请介绍其特点与用途。

bannerAds