- 1. [Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう
- 2. Web API 混在の Rails アプリケーションで500エラーを適切に処理したい
- 3. railsのマイグレーションファイルを削除する方法
- 4. ゼロから始めるstimulus入門4(状態の管理)
- 5. 【Rails】ログローテーションをする方法
- 6. gemが上手く動作せず、gemの内部処理でデバッグしたい/モンキーパッチを作りたいときのやり方
- 7. after_saveでsidekiqを叩いてもデータが存在しない
- 8. 【rails】railsにおけるMVCモデルが誰でもわかるように説明
- 9. RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した
- 10. Sidekiqのretry設定は忘れずに!!
- 11. 【個人開発】万年下痢症の男が胃腸の弱い人のための健康管理アプリ「Puri.log」を作りました
- 12. SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする
- 13. CI / CD パイプラインのエラー奮闘記
- 14. タグ付け タグ検索 機能実装
- 15. ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)
- 16. TypeScriptで書ける型安全なRuby on Railsを求め、ORMの開発を始めた
- 17. 【Ruby on Rails】namespace と scope の違いって何?
- 18. Rubyでハッシュを文字列にできるのに文字列をハッシュにできなくて困りました
- 19. 【Rails】FontAwesomeのCDN読み込みと使い方
- 20. 【超初心者未経験】udemyで「ruby on rails」を学習してみた ①
[Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう
# 概要
マイグレーションに不整合がある場合、**`rails db:migrate`** が失敗することがあります。
過去のmigrationファイルから原因を特定し、修正しようとするとかなり時間がかかります。このような時は **`rails db:schema:load`** コマンドを使うことで、スキーマファイルから迅速にデータベースを構築することができます。
# マイグレーションコマンド
**`rails db:migrate`:**
db/migrate のマイグレーションファイルを順次実行する**`rails db:schema:load`:**
db/schema.rbのスキーマ情報をそのままデータベースに反映する ※db/migrate のマイグレーションファイルは使わない# まとめ
既存プロジェクトの環境構築などで、マイグレーションが失敗した時のために頭の片隅に置いておくと役立つ時が来るかもしれません…新規メンバー参画予定のため備忘録として執筆… :memo:
Web API 混在の Rails アプリケーションで500エラーを適切に処理したい
## はじめに
Rails で、Web API でJSONを返すものと、HTMLのページを返すものを混在させたアプリケーションを `rails new` で作成していました。
routing で、Web API は、 `/api` 以下にマウントしていました。
`/api/xxx` で Web API が呼ばれて想定外のエラーが発生した時、JSON でレスポンスを返すようにしたいと考えたのですが、意外に手間取ったので自分用にメモしておきます。
なお、動作確認は、Rails7.1 で実施しています。
## 500エラーを発生させる
意図的に 500 エラーを発生させるために、Controller で以下のようなコードを書きます。“`ruby
class Api::UsersController < ApplicationController def index raise StandardError, 'error' end end ``` ## 何もしない場合 何もしない場合、Rails は、`/500.html` を返します。JSON ではなくて、H
railsのマイグレーションファイルを削除する方法
# 環境
“`
$ ruby -v
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [aarch64-linux]
“`
“`
$ rails -v
Rails 7.0.6
“`# 削除手順
現在のマイグレーションの状況を確認する。“`
$ rails db:migrate:statusStatus Migration ID Migration Name
————————————————–
up 20230206140511 Create tasks
“`
削除対象のIDを指定し、statusをdownに。“`
$ rails db:migrate:down VERSION=20230206140511
“`
一応確認。“`
$ rails db:migrate:statusStatus Migration ID Migration Name
—————————-
ゼロから始めるstimulus入門4(状態の管理)
## はじめに
今回はstimulusの状態管理についてドキュメントを見ながら学んでいきます。過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)## 状態の管理
最近のフレームワークのほとんどは、常に JavaScript で状態を維持することを推奨されていますが、stimulusではDOM内の属性として状態が存在します。
この方法によって、最初のHTMLドキュメント、Ajaxリクエスト、Turboのページ遷移、さらには他のJavaScriptライブラリなど、どこからでも HTML を
【Rails】ログローテーションをする方法
`config/environments/production.rb`などの設定ファルに以下の設定を追記するとログローテーションができます。
“`rb
# ファイルサイズ基準
config.logger = Logger.new(“log/production.log”, 5, 10 * 1024 * 1024)# 日数基準
config.logger = Logger.new(“log/production.log”, ‘daily’) # weeklyなども可“`
## その他の方法
Linuxコマンドの `logrotate` コマンドを使用してもログローテーションが可能です。
gemが上手く動作せず、gemの内部処理でデバッグしたい/モンキーパッチを作りたいときのやり方
gemの怪しいと思った部分をoverwriteして、binding.pryを追加すれば、追加した場所で止まってくれます。
overwriteのやり方
https://qiita.com/arakaji/items/dbf26f0b1d1c4659ef32#%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%86
after_saveでsidekiqを叩いてもデータが存在しない
# はじめに
E2Eがコケて原因が謎だったところについてまとめておきます
# 問題
ユーザーをDBに保存すると、Sidekiqのジョブを叩くような実装をしました
“`rb:user.rb
after_save TriggerIndexingCallbacks
“`しかしジョブでは作成したユーザーが存在しませんでした
# 解決方法
“`rb:user.rb
after_commit TriggerIndexingCallbacks
“``after_commit`にすることでDBに保存してから実行されるようになりました
保存前に動いていたのが原因でした# おわりに
初めてafter_commitというものを使いました
そもそも知らなかったです
【rails】railsにおけるMVCモデルが誰でもわかるように説明
今回はrailsにおけるMVCモデルについて説明したいと思います。
経験のないエンジニアにとっては非常にわかりにくい概念であると思います。図も使いながらなるべく理解できるよう努めます。# mvcモデルとは
`model`、`view`、`controller`の3つに分けてコードを管理するものです。
それぞれの役割を簡潔に述べたのが以下です。
| 名前 | 役割 |
|:-:|:-:|
| model | データベースとのやり取り |
| view | 画面表示 |
| controller | modelとviewの制御 |# 処理全体像
今回は動的な場合と静的な場合で分けてみました。
動的・静的とは何だ?となっている方は[こちらのサイト](https://www.takara-sc.co.jp/column/2621/)を見てみてください。
図を見ると動的・静的がわかりやすいと思います。
![スクリーンショット 2024-05-22 17.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した
# 概要
`RDS`がフェイルオーバを行うと`Ruby on Rails`(以下、`Rails`)では、ダウンしたDBを参照する現象が発生します。この問題により、`DB`を参照出来ない為、`Rails`が動作しなくなります。今回は、`RDS`のフェイルオーバーが行われたら、`RDS`のイベントサブスクリプション、`SNS`、`Lambda`を使用して、`ECS`で起動している`Rails`の`puma`を再起動する処理を構築しました。今回は、その実装方法を記載します。# 前提条件
– `ECS`で`Ruby on Rails`の環境が動作している
– `Amazon aurora`(postgres)を使用している (RDSでも今回の実施は可能)
– `Terraform`を使用している (webコンソールから設定する事も可能)# Lambdaの処理を動かす為の技術選定
フェイルオーバーが行われた事を`Lambda`に通知する機能として、RDSの[イベントサブスクリプション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/
Sidekiqのretry設定は忘れずに!!
# はじめに
SidekiqでJobを実行して、エラーが発生すれば、リトライをしてくれます。
しかもデフォルトで、`25回`も…!!なので、明示的に設定を行っていないと、25回もリトライされてしまうので、通知するように設定していたら…
イベント数がとんでもないことになってしまいますね。
`(※ 自分がそうでした…)`反省も含めて、アウトプットいたします。
# config/sidekiq.yml に設定
上記ファイルに、以下のように記載いたします。“`rb
:max_retries: 10
“`上記のように記載すると、デフォルト値を変更して、最大で10回リトライしてくれます。
また、Job別にリトライ数を設定することもできます。# 各Jobにも設定可能
“`rb
class HogeJob < ApplicationJob queue_as :hoge sidekiq_options retry: 10 def perform fuga.hogehoge end end ``` `sid
【個人開発】万年下痢症の男が胃腸の弱い人のための健康管理アプリ「Puri.log」を作りました
# はじめに
こんにちは、nomotoと申します。
プログラミングスクールRUNTEQ53期生です。
Puri.logというwebアプリをリリースしました。この記事では、アプリの概要と開発背景に軽く触れた後、機能の実装において、工夫した部分の手法と思考について詳しく書いていきます。
https://www.puri-log.com/
https://github.com/tkhero555/Puri.log
# アプリ概要
胃腸の弱い人のための食事と排便の記録アプリです。
あなたの胃腸と食事の相性を、記録を元にアプリが判定します。
LINEBOTを活用し、手軽に記録ができるようになっています。# このアイデアに決めた理由
私は生まれつき胃腸が弱く下痢症で、中学時代には毎朝腹痛で通学電車を途中下車してトイレに行く人生でした。
社会人になってから自身の腹痛の要因が食事にあるのでは?と考え、色々な食事を試しては胃腸の反応を観察することを始めました。
何を食べると調子を崩すのかを少しずつ把握していった私は、相性の悪い食事を極力避けて生活して症状を改善することができました。
2
SHA-1で作成したsigned_idをRails 7.0でもfind_signedで検索できるようにする
## はじめに:困ったこと・解決したいこと
Rails 7.0ではActive RecordのデフォルトのハッシュダイジェストアルゴリズムがSHA-1からSHA-256に変更されました。https://railsguides.jp/upgrading_ruby_on_rails.html#active-record-%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E5%A4%89%E6%9B%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
この変更が入ると、Rails 6.1以前に生成したsigned_idはRails 7.0以降で利用できなくなります。
“`ruby
# Rails 6.1時代に user.signed_id で生成した署名付きid
signed_id = “eyJfcmFpbHMiOnsibWVzc2FnZSI6Ik1USXpORFU9IiwiZXhwIjpudWxsLCJwdXIiOiJ1c
CI / CD パイプラインのエラー奮闘記
# はじめに
学習用のサイトが完成しCI / CD パイプラインを GitHubActionsで構築しようとしたところエラーがでてうまくできませんでした。
バックエンド・フロントエンド両方でエラーが出ていてビックリしました 笑
その時の奮闘記になります。# もくじ
1\. 開発環境
2\. バックエンド(Rails)
3\. フロントエンド(Next)
4\. まとめ
5\. 参考# 開発環境
・フロント・バックエンドなど
nginx
docker
Next.js 14.2.1
Ruby on Rails 7.0.8.1・デプロイ先
AWS
GitHubActions (CI/CDパイプライン)・使用PC
Macbookpro M3
WSL Ubuntu# バックエンド(Rails)
GitHubActionのエラー内容
・Deploy Amazon ECS task definition
“`
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information,
タグ付け タグ検索 機能実装
# はじめに
今日は複数のタグ付けと検索機能を実装しました
思ったより苦戦してしまったので、まとめます✍️いろんな実装方法があるようですが、簡潔になるよう頑張りました!
※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 完成物
![スクリーンショット 2024-06-12 20.31.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/f0553e44-cd77-2f8b-d937-caea74328b09.png)
![スクリーンショット 2024-06-12 20.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/2445ee6b-7007-1b0a-83e1-77dd37c4b2a8.png)
レイアウトがまだ整ってなくてすみません💦
# ER図
プランは複数のタグをつけることができる
タグは複数のプラン
ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)
## はじめに
今回は古いブラウザを考慮したstimulusの設計をドキュメントを見ながら、学んでいこうと思います。過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)## 古いブラウザを考慮した設計
クリップボード APIは現在のブラウザでは十分にサポートされていますが、古いブラウザを使用するユーザーも少なからずいます。
また、ネットワークの接続不良、CDNが利用できない、jsの一部またはすべてが読み込まれない場合があります。
そうしたブラウザを考慮した設計をstimulusで行うことができます。## 実装
### clipboard_controller.js
– static classes = [ “supported” ]というものを定義
– conne
TypeScriptで書ける型安全なRuby on Railsを求め、ORMの開発を始めた
私はAccel Recordという、TypeScript用ORMライブラリを開発しています。
このライブラリについては、先日[Active Recordパターンを採用したTypeScript用ORM「Accel Record」の紹介](https://qiita.com/koyopro/items/917c2c98db3de7518849)という記事を公開しました。次に、なぜTypeScript用ORMを新たに開発しようと思ったかを書いてみようと思います。
## 最初の動機
普段Ruby on Railsを使ってサーバーサイド開発、TypeScriptを使ってフロントエンド開発をしていると、以下のように感じることがあります。
– **TypeScriptにもRuby on Railsくらい開発効率の高いフレームワークが欲しい**
これはまず「サーバーサイド開発においてもTypeScriptを使いたい」という気持ちがあるということです。それは主に次のような理由があります。
– サーバーサイドも型安全に開発したい
– フロントエンドとバックエンドを同じ言語で開発し、コンテキスト
【Ruby on Rails】namespace と scope の違いって何?
# はじめに
こんにちは、エンジニア3年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!Railsアプリケーションを開発していると、ルーティングの設計がとても大切だと感じることが増えてきました。
同時に自分の理解が浅いことも実感しています…
そこで今回はこの記事でアウトプットをして理解を深めていきたいです。よろしくお願いします!
# 目次
– [namespaceとscopeの違い](#namespaceとscopeの違い)
– [namespaceの特徴](#namespaceの特徴)
– [scopeの特徴](#scopeの特徴)
– [namespaceの使い方](#namespaceの使い方)
– [基本的な使い方](#基本的な使い方)
– [ネストしたリソース](#ネストしたリソース)
– [scopeの使い方](#scopeの使い方)
– [基本的な使い方](#基本的な使い方)
– [パスとパラメータのカスタマイズ](#パスとパラメータのカスタマイズ)
– [使い分けのポイント](#使い分けのポイント)
– [カス
Rubyでハッシュを文字列にできるのに文字列をハッシュにできなくて困りました
# 結論
`eval`を使えば大体できる。使い所は`testコード`。
# 背景
ハッシュを文字列にしたログの出力結果をminitestで検証しようとした時に、文字列をハッシュに変換し、各項目に正しく値が入っていることを確認しようとした時でした。
**文字列に対してto_hashしようとしてもエラーになる。**
ハッシュオブジェクトに`to_s`すると文字列になるのに、文字列に対して`to_hash`するとエラーになります。
どうすれば文字列をハッシュに変換できるか、私なりに考えてみました。
# evalを使う
evalを利用すると簡単に文字列をハッシュに変換することができます。
“`ruby
hoge_hash = { key1: ‘hogehoge’, key2: 999 }
# => {:key1=>”hogehoge”, :key2=>999}
hoge_string = hoge_hash.to_s
# => “{:key1=>\”hogehoge\”, :key2=>999}”
eval(hoge_string)
# => {:key1=>”hogehoge”, :key
【Rails】FontAwesomeのCDN読み込みと使い方
## はじめに
この記事では、「Font Awesome」のCDN(Contents Delivery Network)を使った読み込み方法と基本的な使い方についてまとめました。
SNSのアイコンや設定、編集、削除などの機能をアイコンで表現する際に、Font Awesomeは非常に便利です。自前でアイコンを作成する手間を省き、豊富なアイコンライブラリを簡単に活用できる方法をお伝えします。この記事が皆さんの役に立てば幸いです。
## 環境
– rails
– docker
– taiwindcss## Font Awesomeセットアップ
まずはFont Awesomeの公式ページにアクセスし、アカウントを作成します。
https://fontawesome.com/
登録後、以下の手順で自分用のCDNリンクを取得します。
### 1.ヘッダーメニューまたは画面中央の「**Your Kits**」をクリックします。
![スクリーンショット 2024-06-12 10.26.50.png](https://qiita-image-store.s3.ap-northeas
【超初心者未経験】udemyで「ruby on rails」を学習してみた ①
# ① はじめに
初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!# ② 使用した教材
今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)