Categories

Latest comments

一時的な環境変数設定はenvコマンドでも出来る

linux Linx使い @linux

あるコマンドの実行のためだけに一時的に環境変数を設定するには、 bashやzshでは実行したいコマンドの直前で環境変数設定をすればOKです。

具体的には、下例のように、タイムゾーンに対応する環境変数を設定(TZ=UTC)して、dateコマンドを実行することが出来ます。

$ date
Thu Jan 16 21:08:10 JST 2025
$ TZ=UTC date
Thu Jan 16 12:08:13 UTC 2025

ところが、この機能は一部の古いシェルや軽量シェルには備わっていないらしいです。 そのようなシェルでは、シェルに依存しないenvコマンドを以下のように利用して同じことが可能、という小ネタでした。

$ env TZ=UTC date
Thu Jan 16 12:08:35 UTC 2025
0
Raw
https://www.techtips.page/en/comments/743
❤️1

「Getting Started on Heroku with Rails 8.x」が「db:migrate」でエラーになる

wakairo @wakairo

Herokuを使ってRails 8のアプリを運用するときに手始めに試されるであろうGetting Started on Heroku with Rails 8.xですが、「Last updated November 13, 2024」の版では、heroku run rake db:migrateのところでエラーが出ます。

原因は、Rails 8のデフォルトの新規アプリでは、Solid CacheとSolid Queue、Solid Cableが有効になっており、これら3つの機能はそれぞれデータベースを1つずつ必要とするところにあると思われます。 もう少し詳しく言うと、Rails 7まではアプリ本体の情報を記録するprimaryデータベース1つを用意してそのデータベースへの接続設定を行うだけで良かったところが、 Rails 8からはprimaryデータベースに加えて前述の3つの機能用にそれぞれデータベースを用意して設定しないといけなくなってしまっているのに、 渦中のGetting Startedにはそれに対応する作業の記述がないため、マイグレーションでエラーが出ているものと思われます。

0
Raw
https://www.techtips.page/en/comments/710
😿1

PmRails 1.0をリリースしました。

wakairo @wakairo

PmRails 1.0.0をリリースしました。

PmRailsは、Ruby on Railsのアプリケーションのテストまたは開発をするためのツールセットです。 RailsやRailsが依存するものをローカル環境にインストールすることなく使用できます。 Podmanを活用し、Railsプロジェクトのための隔離されたコンテナ環境を作成します。

ご不明な点や質問などございましたら、このTopicにお気軽にお寄せ下さい。できる範囲で回答いたします。

0
Raw
https://www.techtips.page/en/comments/677
🔧1
🎉1
❤️1

Rails 8.0の新機能に対応するRails guidesのページ

wakairo @wakairo
Last edited

Rails 8.0で導入された新機能に関して記述しているRails guidesのページを以下にまとめました。

なお、Solid Cableの記述がRails guidesのどこにあるかは分かりませんでした。

ちなみに、GitHubのレポジトリは以下の通りで、そのREADME等からも情報を得られます。

0
Raw
https://www.techtips.page/en/comments/666
🔧3
😿2
❤️2
😄1
💡1
💯1

Podmanを利用して、簡単にローカルでRailsガイドの編集内容を確認する方法

wakairo @wakairo

RailsガイドのPull Requestは編集後の生成結果を確認せずに送って良いそうですが、 送る前に確認している方に向けて、Podmanを利用して簡単にローカルでRailsガイドの編集内容を確認する方法のご紹介です。

メインとなるのは、以下の1行のコマンドです。毎回コピペしても良いのですが、長いのでエイリアスを貼ったり、PATHの通った場所にこのコマンドのシェルスクリプトを置いても良いと思います。

podman run -it --rm -v "$PWD":/x -w /x -p 4000:4000 "ruby:$(cat .ruby-version)" bash -c "bundle config set --global path 'vendor/bundle' && bundle install && bundle exec rake assets:precompile && bundle exec jekyll server --host 0.0.0.0"

環境構築

必要になるのはシェルスクリプトを実行できる環境とPodmanのみです。 Podmanのインストールに関してはPodmanの公式インストールガイドをご覧ください。 ちなみにUbuntuなど多くのLinuxディストリビューションでは、aptなどの標準パッケージ管理ツールでPodmanのインストールが可能です。

Podmanを利用して、簡単にローカルでRailsガイドの編集内容を確認する具体的な方法

Podmanがインストールできていれば、以下の手順でRailsガイドの編集と確認が行えます。

  1. /guides/source/ja 内の Markdown ファイルを編集する
  2. 上述の1行コマンドを実行
  3. localhost:4000 から変更結果を確認する

動作不良が起きた等でgemを全て削除したいとき

ちなみに、上述の1行コマンドはvendor/bundle/にgemをインストールします。 Rubyのバージョンが変わって動作不良が起きた際などは、rm -rf vendor/bundle/でgemを全て削除して綺麗な状態にすることが出来ます。

0
Raw
https://www.techtips.page/en/comments/665
😄2
🔄1
❤️1

rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo

Rails 8.0におけるlogger

config.loggerは、Railsアプリで用いるロガーの設定です。

rails newで生成されるconfig/environments/production.rbにおいて、 8.0からこの設定について以下の変更が行われました(この変更のPRその1PRその2)。この変更により、Kamralを用いたproduction環境ではタイムスタンプが二重に表示されなくなります。

-  # Log to STDOUT by default
-  config.logger = ActiveSupport::Logger.new(STDOUT)
-    .tap  { |logger| logger.formatter = Logger::Formatter.new }
-    .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
-
-  # Prepend all log lines with the following tags.
+  # Log to STDOUT with the current request id as a default log tag.
   config.log_tags = [ :request_id ]
+  config.logger   = ActiveSupport::TaggedLogging.logger(STDOUT)

既存アプリでも、production環境でタイムスタンプが二重になっている場合には、この変更を行ってタイムスタンプが1つになるようにすると良いかもしれません。

0
Raw
https://www.techtips.page/en/comments/663
❤️1

rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo

Rails 8.0におけるactive_record.attributes_for_inspect

config.active_record.attributes_for_inspectは、Active Recordオブジェクトのinspectに関わる設定です。

rails newで生成されるconfig/environments/production.rbにおいて、 8.0からこの設定を行う以下のコードが追加されました(この変更のPR)。このコードの追加により、production環境ではinspectの結果に基本的にidのみが含まれるようになります。

  # Only use :id for inspections in production.
  config.active_record.attributes_for_inspect = [ :id ]

この設定はproduction環境でのパフォーマンスの悪化をさけるための変更に端を発していますので、既存アプリでもこのコードを追加すると良いかもしれません。

0
Raw
https://www.techtips.page/en/comments/662

rails 7.2からrails 8.0への移行(アップデート、アップグレード)で必要な作業

wakairo @wakairo
Last edited

Rails 8.0におけるaction_mailer.perform_caching

config.action_mailer.perform_cachingは、メーラーテンプレートでフラグメントキャッシングを行うかどうかの設定です。

rails newで生成されるconfig/environments/production.rbにおいて、 8.0からは以下のようにこの設定を行うコードが削除されました(この変更のPRこの変更のCommit)。このキャッシングを無効にするコードの削除により、メーラーテンプレートでのフラグメントキャッシングが有効になります。

-  # Disable caching for Action Mailer templates even if Action Controller
-  # caching is enabled.
-  config.action_mailer.perform_caching = false

既存アプリでもメーラーテンプレートでのフラグメントキャッシングを有効にしたい場合は、このコードの削除により可能です。

0
Raw
https://www.techtips.page/en/comments/661