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ドライバーよりもはるかに堅実に感じられます。
-
Windows 11にアップグレードする価値はありますか?
2021年6月24日、MicrosoftはWindows 11を公式に発表し、このホリデーシーズンに利用可能になると述べました。新しいバージョンのWindowsは、透過的なUIからゲームのパフォーマンスの向上に至るまで、新しい機能とアップグレードをもたらします。 Windows 10との別れや、新しくリリースされたWindows 11への切り替えは、恐ろしいものになる可能性があります。この切り替えを行う価値があるかどうかを判断すると、気が遠くなる可能性があります。 ここでは、事実を分析し、特に現在のオペレーティングシステムに満足している場合に、Windows11がアップグレードを保証するか
-
Windows 10 のデフォルト パスワードとは
ほとんどすべてのデバイスには通常、デバイスの特定の機能にアクセスするための既定のパスワードが設定されているため、Windows 10 の既定のパスワードが何であるか疑問に思われるかもしれません。 これは、マシンの非表示機能の一部にもアクセスできるようにするためです。次のガイドでは、Windows 10 のデフォルトの管理者パスワードと、Windows ベースのコンピューターでそれを見つける方法とその方法について説明します。 多くのユーザーは、デフォルトのパスワードの背後にはたくさんの機能が隠されていると信じており、パスワードにアクセスすることで、コンピューター上のこれらの隠された機能すべてに