3

Rails 4.2.6 には、もともと MongoDB (Mongoid 5 経由) をメイン データベースとして使用していた Web アプリケーションがあります。ただし、MySQL データベースに接続して、アプリの追加データのみを読み取る必要があります。

これまでのところ、プロジェクトで ActiveRecord を必要とし、開発環境で前述のデータベースとの接続を確立することができました。この件に関する私の構成ファイルは次のとおりです。

モンゴイド.yml

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

データベース.yml

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と次のエラー メッセージが表示されます。

 /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.

私がやりたいことをすることは可能ですか?誰もこれを行う方法を知っていますか?

4

2 に答える 2

1

ここに2つの回避策があります

テスト環境に sqlite データベースを追加します。

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

または: autoloadapplication.rbを環境固有の構成に移動し、activerecordgem を のdevelopmentenv に移動しますGemfile

Gemfile

group :development do
  gem 'activerecord'
end

config/application.rb :

  • 最初に: これをconfig/environments/test.rbandに移動します ( envconfig/environments/development.rbから除外したいモデル、つまりmotestactiverecord

    config.autoload_paths += WHATEVER
    

行を削除require 'rails/all'し、各環境ファイルでも特に使用するフレームワークを必要とします。

于 2016-06-01T09:39:55.190 に答える
1

提供された回答が私のニーズに合わなかったので、私は自分の質問に答えることにしました。

多くの試行錯誤の後、この質問の投稿で提供された情報を適用して、テスト環境で MySQL データベースに接続することを回避できました。

私がする必要があったのは、次の gem をGemfileに追加することだけでした:

group :test do
  gem 'activerecord-nulldb-adapter'
end

この gem はNullDBデータベース アダプターをプロジェクトにインストールします。これにより、ActiveRecord は実際のデータベースを定義しなくても接続を確立できます。

最後になりましたが、config/database.ymlを更新して、新しいアダプターを使用するテスト環境でデータベース接続のパラメーターを追加しました。

test:
  adapter: nulldb
  encoding: utf8
  reconnect: false
  database: mysql_test
  pool: 5
  username: user
  password: pass
  socket: /var/run/mysqld/mysqld.sock
于 2016-06-02T10:34:58.457 に答える