Categories
├─Books Cloud services Events Standard TechTips Others
├─Software
│ ├─Mac OS Programming languages Windows Others
│ ├─Libraries
│ │ └─C C++ Java JavaScript Python Ruby Rust Others
│ └─Unix
│ └─Unix commands Others
└─Web
└─Document Service Others
rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
rails 7.2への移行におけるActive Storageのmigration
bin/rails app:update
コマンドを実行すると以下の3つのファイルがdb/migrate/
に作成されることがありますが、Active Storageをまだ使用したことがないアプリケーションでは、 これら3つのファイルは単純に削除してしまっても良いはずです。
より正確に言うと、データベースにactive_storage_blobsテーブルが存在していない場合は、 これら3つのファイルは単純に削除してしまっても良いはずです。 その理由として、これら3つのファイルはデータベースのactive_storage_blobsテーブルに対して影響を与えるものであり、
table_exists?(:active_storage_blobs)
がfalseを返すと何もせずにreturnする処理が3つのファイル全てに記述されているからです。ご自身のRailsアプリケーションのデータベースにactive_storage_blobsテーブルが存在するかの確認は
bin/rails console
を実行して、 以下のようにコマンドを実行することで行えます。 結果がfalse
であればactive_storage_blobsテーブルは存在していない、つまり前述の3つのファイルは削除で大丈夫のはずです。ちなみに、データベースにあるテーブルの一覧を見たい場合には
bin/rails console
でActiveRecord::Base.connection.tables
を叩くことでテーブルの一覧を確認できます。rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
rails 7.2でのconfig/puma.rbの大幅な更新
rails new
で生成されるconfig/puma.rbが大幅に更新されました。主要な変更点は以下の通りです。
threads
の指定方法の変更: リリースノート:Pumaのデフォルトのスレッド数が新しくなった、PR #50450 、PR #50669pidfile
の変更: PR #50644、PR #50669、commit 57a6916environment
の削除: PR #52541workers
の削除: commit 142e6abpreload_app!
の削除: PR #52541worker_timeout
の削除: PR #52541rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
rails 7.2ではfilter_parametersに:emailが追加された
rails new
で生成されるconfig/initializers/filter_parameter_logging.rbにおいて、 rails 7.2でconfig.filter_parametersに:email
が追加されました。 この追加に関するプルリクエストはこちらです。セキュリティや個人情報保護の観点からは、確かにメールアドレスをフィルタすることは適切であるように思いますので、既存アプリにおいても:emailを追加すると良さそうです。
ちなみに、デバッグ作業などでメールアドレスを確認するときには少し不便になるような気もしますが、 emailへの直接の読み書きが疎外されるわけではありませんし、 またpluckなどの活用もすればデバッグの支障にはさほどならないような気がします。
rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
rails 7.2におけるpublic_file_server.enabled
rails new
で生成されるconfig/environments/test.rbにおいて、 7.1以前は以下の設定用コードが存在していましたが、 このプルリクエストのマージによって削除されました。削除された理由は、このプルリクエストによると、default値がtrue、かつ、全てのenvironment(test、development、production)の間で設定値に違いが無いということからです。 ですので、既存アプリにおいても、設定値を
true
としている場合には、この設定用コードは削除してしまっても良いかもしれません。rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
rails 7.2におけるannotate_rendered_view_with_filenames
annotate_rendered_view_with_filenamesは、rails 6.1で追加されたビューのテンプレートの開始と終了に対応するHTMLコメントを挿入する機能です。
rails new
で生成されるconfig/environments/development.rbにおいて、 7.1以前はこの機能を有効化する以下のコードがコメントアウトされていましたが、 7.2からは以下のように有効になるコードになりました(この変更のPR)。 ちなみに、default値は7.1以前から変わらずfalseですので、 development.rb内の当該設定を意図的に変更しなければ、既存アプリの挙動が勝手に変わることはありません。確かにdevelopment環境において便利そうな機能ですので、7.2へのアップデートを機に、使い始めてみるのも良いかもしれません。
rails 7.1からrails 7.2への移行(アップデート、アップグレード)で必要な作業
基本的にはRailsガイドの手順に従えば良いと思います。
ガイドの手順にもありますが、ぜひ
bin/rails app:update
コマンドを活用しましょう。rails 7.2への移行で対応が必要そうな個別の作業について、以下のコメントでそれぞれ取り上げますので、ご参考になれば幸いです。
PostgreSQLイメージとPodmanを利用した使い捨てのコンテナ環境
PostgreSQLに関した練習やテスト、実験などを行うときにPostgreSQLが動いている一時的な環境が欲しくなるときがあります。 PostgreSQLイメージとPodmanを利用すると、特定バージョンのPostgreSQLに関する一通りの操作ができる一時的なコンテナ環境を用意することが出来ます。
以下にコンテナ環境の作成、利用、削除の流れと方法を示します。
コンテナ環境の作成
以下の3つのコマンドを実行することで、PostgreSQLのコンテナ環境を作成し、クライアント側のコンテナのbash環境に入ることが出来ます。
なお、コマンド内の「16」のところはPostgreSQLのメジャーバージョンに相当しますので、ご利用になりたいバージョンの数に変更してください。 また、
-v "$PWD":/x -w /x
のオプションにより、ホストOSのカレントディレクトリにコンテナ内からもアクセス出来る状態でbashが立ち上がります。 したがって、実験などに利用したいファイルをカレントディレクトリに置いてから以下のコマンドを実行すればコンテナ内でもそのファイルを利用できますし、 コンテナ内で/x
のディレクトリに作成したファイルはコンテナ環境を終了した後もホストOSのカレントディレクトリに残ります。以下のようなプロンプトが表示されていれば成功です。クライアント側のコンテナのbash環境に入れました。
クライアント側のコンテナのbash環境の利用
このbash環境では、
psql
などのPostgreSQLのコマンドを一通り利用することが出来ます。以下に例を示します。PostgreSQLのターミナルを開く例:
バックアップファイルを作成する例:
バックアップファイルをリストアする例:
クライアントのコンテナを終了しそのbash環境から退出する場合は
exit
コマンドで抜けられます。 また、退出後にもう一度クライアントを使いたくなった場合は、後述のコンテナ環境全体の削除をまだしていなければ、 以下の3つめのコマンドだけ実行すれば、クライアントのコンテナをもう一度作成しそのbash環境に入ることが出来ます。コンテナ環境全体の削除
以下のコマンドで、コンテナ環境全体の停止と削除が実行できます。
HerokuでDBのアップデート等を行うときの作業の流れ
PostgreSQLのメジャーバージョンを上げるときなど、通常のデータの読み書きとは異なる更新をDBに対して行うことがあります。
ここではHerokuの公式ドキュメントである「Heroku Postgres データベースのバージョンのアップグレード」を参考に、このようなアップデート等の変更をDBに行うときの大まかな流れをご紹介します。
DBにアップデート等の変更を行うときの作業の流れ
新たなDBを作成する
メジャーバージョンを上げるといった大きな更新をするときには、 何かあったときにすぐに戻せるよう、元のDBには手を入れずそのままにして温存します。 代わりに、
addons:create
コマンドなどで、大きな更新を行う別の新たなDBを作成します。DBへの書き込みを停止させて、データを完璧に複製する
addons:create
コマンドの--follow
オプションやpg:copy
コマンドを利用して、 元のDBから新たなDBにデータをコピーします。 この際、適切にアプリをメンテナンスモードにするなどして、元のDBへの書き込みを停止させ、 停止している間に元のDBのデータの全てが新たなDBに複製されている状態にします。ちなみに、公式ドキュメントには記載がありませんが、 バックアップが短時間で終わるデータの規模であるならば、 トラブルに備えてこの書き込みが停止しているタイミングで元のDBのバックアップを手動で作成しても良いように思います。
新たなDBに手を加える
メジャーバージョンの更新などの必要があれば、新たなDBに手を加えます。
アプリの接続先を元のDBから新たなDBに切り替える
pg:promote
コマンドを利用して、アプリが読み書きする対象を新たなDBに切り替えます。アプリを公開してテストする
メンテナンスモードを解除するなどして、アプリを公開状態に戻します。 本番環境が問題なく動いているかテストを行います。 何かしら問題がある場合には、アプリの接続先を元のDBに迅速に戻すことで、被害が最小化できるはずです。
不要になったDBを削除する
元のDBなどが不要になった場合など、
addons:destroy
コマンドなどを利用して、不要になったDBを削除します。(参考)ステージングアプリを利用したテスト
より安全にDBの更新などを行うために、本番のアプリのDBを更新する前に、ステージングのアプリでDBの更新をテストすることも可能です。詳細はPostgreSQL メジャーバージョンのアップグレードのテストをご覧ください。
Herokuでは環境変数DATABASE_URLを使ってrailsアプリが接続するDBの設定を行っている
railsのDB接続設定では、環境変数DATABASE_URLの情報が優先されます。
Herokuでは、環境変数DATABASE_URLへの設定を通してDB設定が行れています。また、このDB設定(つまり、DATABASE_URLの値)を変更したいときには
heroku pg:promote
コマンドを用います。なお、環境変数DATABASE_URLの現在の設定値は
heroku config
コマンドで確認できます。tオプションを付けてPodmanからリダイレクトでバイナリ出力を取り出すと壊れる
概要
Podmanで、
-it
オプション、厳密には-t
オプションを付けっぱなしで、以下のようにリダイレクトを使うと、出力されたファイルの内容が壊れることがあります。-t
オプションの意味を考えれば、出力をリダイレクトに回すときに指定する必要があるオプションではないのですが、コマンドを改変して流用するときなどに付けっぱなしにするとバイナリが壊れますのでご注意ください。この問題は、以下のようにtオプションを外すことで回避できます。もちろんiオプションを残さず合わせて外してもOKです。
また、この問題を回避方法として、以下のように、
bash -c
を使う方法もあります。ちなみにこの問題は、Dockerでも起きるようです。
詳細
例として、0x00から0xffまでの256バイトのバイナリを標準出力に出力する以下のRubyスクリプトを利用します。
print_bin.rb
Podmanを使わずに、ローカルでこのスクリプトを実行して確認すると、以下のように正しく出力されているのが分かります。
では、Podmanで動かした出力をリダイレクトさせてみたものを確認するとどうなっているかといいますと、 0x09の後に0x0dが増えてしまっており、ファイルの中身が壊れていることがわかります。
この問題を回避するために、今度は以下のように
-t
オプションを外します。 無事に正しく出力できていることが分かります。この問題を回避するために、今度は以下のように
bash -c
を使ってみます。 こちらでも無事に正しく出力できていることが分かります。