首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Rails 4.2.6应用程序使用两个数据库。我只能使用一个用于测试目的吗?

我的Rails 4.2.6应用程序使用两个数据库。我只能使用一个用于测试目的吗?
EN

Stack Overflow用户
提问于 2016-06-01 09:15:40
回答 2查看 335关注 0票数 3

我在Rails 4.2.6中有一个web应用程序,最初使用MongoDB (通过Mongoid5)作为其主数据库。但是,现在我需要连接到一个MySQL数据库,以便只读取我的应用程序的一些附加数据。

到目前为止,我已经在我的项目中需要ActiveRecord,并且能够在开发环境中建立与上述数据库的连接。为此,我的配置文件如下:

mongoid.yml

代码语言:javascript
复制
development:
  clients:
    default:
      database: mongo_development
      hosts:
        - localhost:27017
      options:
test:
  clients:
    default:
      database: mongo_test
      hosts:
        - localhost:27017
      options:
        read:
          mode: :primary
        max_pool_size: 1
  options:
    raise_not_found_error: false

database.yml

代码语言:javascript
复制
development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mysql_development
  pool: 5
  username: user
  password: pass
  socket: /var/run/mysqld/mysqld.sock

当我运行我的测试套件时,问题就出现了。我正在使用RSpec,执行bundle exec rspec spec会产生以下错误消息:

代码语言:javascript
复制
 /home/user/.rvm/gems/ruby-2.1.6@global/gems/activerecord-4.2.6/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_connection': 'test' database is not configured. Available: ["development"] (ActiveRecord::AdapterNotSpecified)

ActiveRecord抱怨没有要连接的测试数据库,但问题是我没有用于测试的MySQL数据库:我编写的规范只与Mongoid模型交互。

我正在考虑作为一个黑客创建一个空的MySQL数据库,但是我首先想知道是否可以配置ActiveRecord而不是连接到一个测试数据库,并且只使用mongo_test

能做我想做的事吗?有人知道怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 10:34:58

我决定回答我自己的问题,因为所提供的答案不符合我的需要。

经过多次试验和错误之后,我能够避免在测试环境中连接到MySQL数据库,以适应这个问句中给出的信息。

我唯一需要做的就是将下面的gem添加到我的Gemfile

代码语言:javascript
复制
group :test do
  gem 'activerecord-nulldb-adapter'
end

此gem在项目中安装NullDB数据库适配器,使ActiveRecord能够在不需要定义真实数据库的情况下建立连接。

最后但同样重要的是,我更新了config/database.yml,在使用新适配器的测试环境中添加了数据库连接的参数:

代码语言:javascript
复制
test:
  adapter: nulldb
  encoding: utf8
  reconnect: false
  database: mysql_test
  pool: 5
  username: user
  password: pass
  socket: /var/run/mysqld/mysqld.sock
票数 1
EN

Stack Overflow用户

发布于 2016-06-01 09:39:55

这里有两个解决办法

也可以:为您的测试env.添加sqlite数据库

代码语言:javascript
复制
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

或:将您的自动加载程序从application.rb 移动到特定于环境的信任,并将 activerecord 宝石移动到 Gemfile**.**上的 development env

Gemfile

代码语言:javascript
复制
group :development do
  gem 'activerecord'
end

config/application.rb:

  • 首先:将其移到config/environments/test.rbconfig/environments/development.rb (请记住要从test env中排除哪些模型,即activerecord mo )。 config.autoload_paths +=什么的

删除require 'rails/all'行,并要求在每个环境文件中专门使用框架。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37564339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档