config/environments/production.rb
の config.assume_ssl
と config.force_ssl
は false
にするdocker build -t writebook .
docker run -p 3000:3000 -e SECRET_KEY_BASE=dummy writebook
config/environments/production.rb
の config.assume_ssl
と config.force_ssl
は false
にするdocker build -t writebook .
docker run -p 3000:3000 -e SECRET_KEY_BASE=dummy writebook
concurrent-ruby
concurrent-rubyの並行処理は全てthread safe
Railsで標準で入ってるから無駄な外部依存にはならない
昔はparallelをよく使ってたけどこっちで十分そう(マルチコアで並列処理したいならparallelで良いかも)
class ConcurrentProcessor
ActiveModelを使って外部APIをRailsらしく実装する | Webuilder240.com
良さげ
でも正直レスポンスとモデルは分けたいんだよな...
rails
ハッシュ関係の便利関数 | Railsドキュメント
便利〜
hash = {person: {name: 'Rob', age: '28'}}
hash.deep_symbolize_keys
# {:person=>{:name=>"Rob", :age=>"28"}}
find_sole_by ActiveRecord::FinderMethods - Ruby on Rails API
1件のみ取得/2件以上ある場合はExceeded/1件もない場合はRecordNotFound
[https://railsguides.jp/active_record_validations.html#%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B
カスタムvalidatoinを実装し、複数modelで
Rails: Solid Queueで重要なUPDATE SKIP LOCKEDを理解する(翻訳)|TechRacho by BPS株式会社
複数のワーカーがそれぞれレコードを取得するときにあるレコードが複数のワーカーによって取得されないようにしたい。
それを実現するためにはTRANSACTIONでFOR UPDATEにすれば良い
Identifying User Idenity - Speaker Deck
Userテーブルはidのみにして登録前後、個人情報などをいかに分割していくかの話が綺麗にまとまっており良い
rails
Rails 8.0 Changelog(全項目リンク付き)|TechRacho by BPS株式会社
144件の変更が含まれている
メモ
query_cache
ActiveRecordからのDB問い合わせの結果をキャッシュしてくれるやつ。デフォルト有効。これfalseにしようと思ったことなかった...。
Railsのmigration時にstring型でtableを定義するとvarcharになる。MySQLの場合はvarchar(255)になるので問題ないがPostgreSQLの場合はvarcharになる。
PostrgreSQLのドキュメントを読むと下記の通り。
長さを指定する場合、nはゼロより大きな値でなければならず、10,485,760を超えることはできません。 長さ指定子なしでcharacter varying (またはvarchar)が使用された場合、この型は任意の長さの文字列を受け入れます。
safe_join | Railsドキュメント
生のhtmlタグをサーバー側でcontactしたい場合に安全にやるためのやつ。html_safeを使うとrubocopで警告が出て、確かにユーザー入力ないとしても最低限
ActionView::Base
[https://github.com/rails/rails/blob/d0dcb8fa6073a0c4d42600c15e82e3bb386b27d3/actionview/lib/action_view/base.rb rails/actionview/lib/action_view/base.rb at d0dcb8fa6073a0c4d42600c15e82e3bb386b27d3 ·
ApplicationController
で定義したmethodはどうテストするべきか。
ApplicationControllerのメソッドのテストは単体でテストしにくい。理由としてはbefore_actionとかのhookがセットになってたりするから。ApplicationControllerで定義したメソッドは大抵子クラスのControllerのactionで使われたりfilterで使われたりするのが目的で、純粋にテストしようとしてもそれを継承したcontrollerありきのよう
include ActiveModel::Model
include ActiveModel::Attributes
パRails12章あたりで解説されてる(記憶..?)のやつ。modelでおまじないの用によく定義してpureなruby objectのモデルとして定義したりするけどそれぞれちゃんと説明できるようにしておきたくて機能を改めて言語化しとく。
ActiveModel::Model
ActiveRecordとDDDの不一致
ActiveRecordではテーブルと1対1対応したモデルが作成される
一方でDDDでのドメインモデルは必ずしも(というかほとんど)テーブルと1対1対応しない
Railsの中心にはActiveRecordがあるので例えばドメインモデルの集約を表現しにくいなどDDD的な設計がやりずらい
DDD境界づけられたコンテキストの連携
API通信
ドメインイベント
ACL(Anti Corruption Layer)
腐敗防止層パターン - AWS 規範ガイダンス
RailsでのDDD集約実装 | ChatGPT
ActiveRecordの関連とかインスタンスメソッドを駆使して集約を表現し、複雑なトランザクションなどはサービスオブジェクトが推薦された。
純粋なRubyのクラスでの表現の場合についても生成させた。builderパターンとかデザインパターン系の命名でクラスを作成してその中でトランザクションを実装したりする感じ。
Rails + OpenAPI + ViewComponent + Hotwire(TODOの表示切り替え/CRUD/通知の実装など)の構成でアプリを作る練習。まずはTODOリストを作成する。DBやモデル周りの設計は別にスコープ外なので外部APIとして[https://jsonplaceholder.typicode.com/ JSONPlaceholder - Free Fake REST AP
JSON Placeholder APIのOpenAPI化
Railsのdestroy時にredirect index_path, status: :see_other
みたいな指定をする理由ってなんだっけ?と気になった。
Claudeの回答
redirect_toメソッドでstatus: :see_otherを指定する理由について説明します:
HTTPステータスコード303(See Other)を送信します。これは、リダイレクト先のリソースを別のURLで取得すべきことを示します。
そういえば従来ならlib
配下に配置したライブラリを起動時に自動読み込みさせるためにはconfig/application.rb
にautoload_paths
で追加するような処理を書いたりしてたがRails 7.1から[autoload_lib https://railsguides.jp/autoloading_and_reloading_constants.html#config-a
Rails 7.1でlibディレクトリを自動読み込みするデフォルトプラクティスが決まった #Rails7.1 - Qiita
ドキュメント
Ruby on Rails API
Overview | ViewComponent
Ruby on Rails Guides
中級者向け記事シリーズ
リソース
Overview | ViewComponent
公式Docs
Rails + ViewComponentによるコンポーネント指向UI開発
Rails7 + ViewComponent + Hotwireでのコンポーネント指向なフロントエンド開発を試してみた