在非 Rails 环境中通过 Mongoid 创建 MongoDB 索引

Posted

技术标签:

【中文标题】在非 Rails 环境中通过 Mongoid 创建 MongoDB 索引【英文标题】:Creating MongoDB indexes via Mongoid in non-Rails environment 【发布时间】:2021-01-06 22:15:18 【问题描述】:

我正在尝试使用 MongoDB 作为我的数据库来构建基于 Roda(非 Rails)的 API。我安装了 Mongoid gem 并配置了连接。不幸的是,当我尝试使用rake db:mongoid:create_indexes 创建定义的索引时,由于缺少environment 一个,任务失败。我应该做什么/在我的Rakefile 中包含什么来提供所需的任务?

回溯:

rake aborted!
Don't know how to build task 'environment' (See the list of available tasks with `rake --tasks`)
/home/tomasz/.rvm/gems/ruby-2.7.1/bin/ruby_executable_hooks:24:in `eval'
/home/tomasz/.rvm/gems/ruby-2.7.1/bin/ruby_executable_hooks:24:in `<main>'
Tasks: TOP => db:mongoid:create_indexes
(See full trace by running task with --trace)

Rakefile的相关部分:

require 'mongoid'
path = Gem::Specification.find_by_name('mongoid')
load "#path.gem_dir/lib/mongoid/railties/database.rake"

rake -T 输出:

rake db:create_indexes                    # Create indexes specified in Mongoid models
rake db:drop                              # Drops all the collections for the database for the current Rails.env
rake db:mongoid:create_indexes            # Create indexes specified in Mongoid models
rake db:mongoid:drop                      # Drop the database of the default Mongoid client
rake db:mongoid:purge                     # Drop all non-system collections
rake db:mongoid:remove_indexes            # Remove indexes specified in Mongoid models
rake db:mongoid:remove_undefined_indexes  # Remove indexes that exist in the database but are not specified in Mongoid models
rake db:mongoid:shard_collections         # Shard collections with shard keys specified in Mongoid models
rake db:purge                             # Drop all collections except the system collections
rake db:remove_indexes                    # Remove indexes specified in Mongoid models
rake db:reset                             # Delete data and loads the seeds
rake db:seed                              # Load the seed data from db/seeds.rb
rake db:setup                             # Create the database, and initialize with the seed data
rake db:shard_collections                 # Shard collections with shard keys specified in Mongoid models

【问题讨论】:

【参考方案1】:

你需要:

定义一个名为environment的任务, 在此任务中加载所有模型类。

如何加载模型类取决于您的应用程序。

【讨论】:

以上是关于在非 Rails 环境中通过 Mongoid 创建 MongoDB 索引的主要内容,如果未能解决你的问题,请参考以下文章

管理 mongoid 迁移

在 ruby​​ on rails 3 中通过电子邮件创建订阅

如何将内存中的 MongoDB 与 Rails、Mongoid 和 Rspec 一起使用?

在 Rails 中通过 has_many 连接表

使用 mongoid 在 rails 中保存带有嵌入对象/文档的对象

Rails,mongoid,heroku 性能