Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Mongoid5へのアップグレード/mongo-ruby-driver

開発構成

Mongoid 5にアップグレードした後にRailsアプリを起動するときに最初に遭遇することの1つは、データベース構成が正しくないというエラーです。

修正は簡単です。sessionsを変更するだけです。 clientsへ :

development:
  clients:
    default:
      database: appsignal_development
      hosts:
        - localhost:27017

ドライバーの変更

私たちのコードベースでは、Mongoidを使用する代わりに、moped / mongo-ruby-driverで直接クエリを実行するために、多くの「ドライバーにドロップダウン」します。アカウントごとにコレクションを作成します。ここでは、sessionも変更する必要があります clientへ 。もう1つの変更は、readです。 :modeのハッシュが必要になりました 値を直接ではなく、キー:

  def create_log_entry_collection
    Mongoid
      .client('default') # used to be `.session('default')`
      .with(:read => {:mode => :primary}) # used to be `read: => :primary`
      .database
      .command(:create => 'foo')
  end

Mopedにはinsertがあります 単一のドキュメントまたはドキュメントの配列のいずれかを受け入れるメソッド。新しいmongo-ruby-driverには2つの別々のメソッドが付属しており、挿入するドキュメントの量に応じて1つを選択する必要があります。

# Before
Mongoid.client('default')['foo'].insert(document)
Mongoid.client('default')['foo'].insert([document, document])
 
# After
Mongoid.client('default')['foo'].insert_one(document)
Mongoid.client('default')['foo'].insert_many([document, document])

注文の欠如

新しいドライバーでの最大の変更点の1つは、ドキュメントが_idで並べ替えられなくなったことです。 デフォルトで。

最初と最後に_idを追加しなくなりました 並べ替えオプションが提供されていない場合に並べ替えます。ドキュメントが最初または最後であることを保証するには、明示的な並べ替えが含まれている必要があります。

これは、注文に依存する場所(.first)を意味します 、.last )クエリを_idで明示的に並べ替える必要があります :

# Before
expect( User.first.name ).to eq 'bob'
expect( User.last.name ).to eq 'kelso'
 
# After
expect( User.asc('_id').first.name ).to eq 'bob'
expect( User.asc('_id').last.name  ).to eq 'kelso'
 

コードが以前と同じように動作することを確認するために、_idで並べ替えるデフォルトのスコープを追加する懸念事項を作成しました。 :

# concerns/ordered_by_id_asc.rb
module OrderedByIdAsc
  extend ActiveSupport::Concern
 
  included do
    default_scope -> { asc('_id') }
  end
end
# models/account.rb
class Account
  include Mongoid::Document
  include Mongoid::Timestamps
  include OrderedByIdAsc
end

FindAndModify

Find_and_modify 削除されました。代わりに、次の3つの方法から選択できます。

  • find_one_and_update
  • find_one_and_replace (便利なメソッド、find_one_and_updateを呼び出します )
  • find_one_and_delete

ExpireAfterSeconds

よりあいまいな変更の1つは、TTLインデックスの作成方法です。 TTLインデックスを使用して、プランに応じて顧客データを自動的に削除します(たとえば、7日後または1か月後)。

以前はインデックスのオプションはexpire_after_secondsと呼ばれていました 、ただし、名前がexpire_afterに変更されました :

# Before
collection.indexes.create_one(
  {:time => 1},
  {:expire_after_seconds => ttl}
)
 
# After:
collection.indexes.create_one(
  {:time => 1},
  {:expire_after => ttl}
)

ステージング/本番構成の変更

開発中は、sessionsを変更するだけで済みました clientsへ 、ただし、ステージング/本番構成にはさらに多くの作業が必要でした:

# Before
staging:
  sessions:
    default:
      database: appsignal_main
      username: <%= ENV['MONGOID_USERNAME'] %>
      password: <%= ENV['MONGOID_PASSWORD'] %>
      hosts:
        - mongo1.staging:27017
        - mongo2.staging:27017
        - mongo3.staging:27017
      options:
        read: :primary
        pool_size: {{ mongoid_pool_size }}
        ssl:
          ca_file: /etc/ssl/certs/root_ca.crt
          client_cert: /app/shared/config/mongodb_app.crt
          client_key: /app/shared/config/mongodb_app.key
 
# After
staging:
  clients:
    default:
      database: appsignal_main
      hosts:
        - mongo1.staging:27017
        - mongo2.staging:27017
        - mongo3.staging:27017
      options:
        user: <%= ENV['MONGOID_USERNAME'] %>
        password: <%= ENV['MONGOID_PASSWORD'] %>
        read:
          mode: :primary
        max_pool_size: {{ mongoid_pool_size }}
        ssl: true
        ssl_ca_cert: /etc/ssl/certs/root_ca.crt
        ssl_cert: /app/shared/config/mongodb_app.crt
        ssl_key: /app/shared/config/mongodb_app.key
        replica_set: staging
  • username userに名前が変更されました optionsに移動しました
  • password optionsに移動しました
  • read modeという名前のネストされたキーが必要になりました
  • SSL ネストされたハッシュではなくなりましたが、optionsの下に設定されています
  • 構成にはreplica_setが必要です セットアップがレプリカセットの場合はキー

アップグレードドキュメントには、MongoDB 2.4および2.6が:plainを使用すると記載されています authですが、auth_mechを削除する必要がありました セットアップを機能させるには、すべて一緒にキーを押します。

結論

これは非常に広範なリストですが、アップグレードは比較的簡単で、新しいドライバーは古いMopedドライバーよりもはるかに堅実に感じられます。


  1. Windows 11にアップグレードする価値はありますか?

    2021年6月24日、MicrosoftはWindows 11を公式に発表し、このホリデーシーズンに利用可能になると述べました。新しいバージョンのWindowsは、透過的なUIからゲームのパフォーマンスの向上に至るまで、新しい機能とアップグレードをもたらします。 Windows 10との別れや、新しくリリースされたWindows 11への切り替えは、恐ろしいものになる可能性があります。この切り替えを行う価値があるかどうかを判断すると、気が遠くなる可能性があります。 ここでは、事実を分析し、特に現在のオペレーティングシステムに満足している場合に、Windows11がアップグレードを保証するか

  2. Windows 10 のデフォルト パスワードとは

    ほとんどすべてのデバイスには通常、デバイスの特定の機能にアクセスするための既定のパスワードが設定されているため、Windows 10 の既定のパスワードが何であるか疑問に思われるかもしれません。 これは、マシンの非表示機能の一部にもアクセスできるようにするためです。次のガイドでは、Windows 10 のデフォルトの管理者パスワードと、Windows ベースのコンピューターでそれを見つける方法とその方法について説明します。 多くのユーザーは、デフォルトのパスワードの背後にはたくさんの機能が隠されていると信じており、パスワードにアクセスすることで、コンピューター上のこれらの隠された機能すべてに