- 1. Dockerを使用してRailsアプリをRenderへデプロイした
- 2. 【Rails】blank?とempty?は空白文字とnilの扱いが異なる
- 3. counter_cacheの導入と使い方
- 4. 【初心者向け】Ruby on Rails webサイトへの表示について
- 5. Rails+docker-compose.ymlで開発環境を作成しようとしたらnode_modulesが行方不明になった件
- 6. Raspberry PiにRailsサーバーを立てて運用する
- 7. Rspec で特定種類のテストだけを対象に before / after を設定する例
- 8. 【Rails7.0】nomethoderror: undefined method ‘raw_filter’
- 9. heroku run rails db:migrateでdbに接続ができないエラーが出た。
- 10. 【Rails】Support for calling #default_scope without a block is removed.
- 11. Railsガイドへコントリビュートするまでの経緯とそこから得られたもの
- 12. 全てのモデルを列挙する
- 13. 【Rails】RSpecでのテスト時に詰まったところ~画像の添付、postリクエスト時のパラメーター付加など~
- 14. Docker, docker-compose, rails を使って、HelloWorld を表示する。
- 15. docker, docker-compose を使って rails 開発を行うときのコマンド
- 16. Swaggerを使って RubyonRails ✖︎ WebAPI 作成してみた
- 17. Dockerで「docker compose exec web bin/dev」がうまくいかないときの対処法②
- 18. findとfind_byの使い分けについて
- 19. RSpecでCapybaraのvisitメソッドを実行するとSelenium::WebDriver::Error::WebDriverErrorが出てしまう件
- 20. 【Rails】メンション付きコメントがあった際にメールで通知をする方法
Dockerを使用してRailsアプリをRenderへデプロイした
この記事は、Dockerを使用してReilsアプリをRenderへデプロイしたいが、エラーが出てデプロイできていない方向けの記事です。
### 環境
Rails 7.2.1
Ruby 3.2.0
PostgreSQL
Dockerを使用### フォルダ・ファイル構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426016/9924e9b7-2d70-3eda-1838-659e929025fc.png)
※Dockerfileはrailsapp内にもう一つあります。### 結論下記の内容でデプロイに成功した。
“`render.yaml
services:
– type: web
name: compassbook
env: ruby
rootDirectory: railsapp
buildCommand: |
echo “Starting build process…”
bundle install
【Rails】blank?とempty?は空白文字とnilの扱いが異なる
## はじめに
`blank?`と`empty?`の違いがよくわからなくなりました。
そこでこの記事では、空白文字と`nil`を切り口に両者の違いを整理します。
## `blank?`と`empty?`は空白文字とnilの扱いが異なる
空白文字と`nil`を順番に確認します。
### 空白文字について
– `blank?`メソッド: `true`と判定
– `empty?`メソッド: `false`と判定“`ruby
rails> ” “.blank?
=> true
rails> ” “.empty?
=> false
“`### `nil`について
– `blank?`メソッド: `true`と判定
– `empty?`メソッド: `NoMethodError`の例外発生“`ruby
rails> nil.blank?
=> true
rails> nil.empty?
/opt/homebrew/lib/ruby/gems/3.3.0/gems/irb-1.14.0/lib/irb.rb:1285:in `full_message’: undefi
counter_cacheの導入と使い方
この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。
## 記事投稿の背景
この記事ではXのクローンサイトを作成中にBulletで検知したN+1問題を解決するために実装した内容を紹介します。
機能としては投稿に対するいいねとコメントの数を集計して表示させる機能に関する内容です。
実装当初の内容と修正後の内容を掲載したいと思います。## 実装当初のコード
“`ruby:tweet.rb
class Tweet < ApplicationRecord belongs_to :user validates :content, presence: true, length: { in: 1..140 } has_many_attached :images has_many :favorites, dependent: :destroy has_many :comments, dependent: :destroy has_many :retweets, dependent:
【初心者向け】Ruby on Rails webサイトへの表示について
現在、デイトラでWeb開発を学んでおり、その学習において、学んだことを共有させていただきます!
現在は、Ruby on RailsでWebサイトを作成中です。
![スクリーンショット 2024-09-25 15.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894345/650a3c5b-d9bd-c4a2-af14-ce07b232e71e.png)
どうやってこれらの文字を表示しているのでしょうか?
“`routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
get ‘/’ => ‘home#index’
end
“`
ブラウザから get ‘/’ リクエストがきたら、routes.rbで処理が開始され、home#indexが実行されます
Rails+docker-compose.ymlで開発環境を作成しようとしたらnode_modulesが行方不明になった件
# 結論
`.dockerignore`で共有外にしていても`docker-compose.yml`でホストをマウントすると、ホスト側の状態が上書きされ`node_modules`が消えていた。
`docker-compose.yml`の`volumes`に以下のようにしてホストとは独立した`匿名ボリューム`を作成し、上書きを回避する。
“`yml:docker-compose.yml
# ※myappの部分のディレクトリ名は読み替えてください
volumes:
– .:/myapp
– /myapp/node_modules # ホストと独立した匿名ボリュームをマウント
“`
`.dockerignore`で指定していれば除外されると勘違いしていた。
# 顛末
## 1. 要件
新しく作成するプロダクトの開発環境の要件は以下。
– Railsのプロダクト
– Playwrightを利用(特定のサイトをスクレイピングするため)
– docker composeコマンドで起動
– ホストにはnode_modulesの内容を反映したくない
## 2. node_module、消
Raspberry PiにRailsサーバーを立てて運用する
![P_20240924_172516.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72890/ea5e1765-6b95-a2c9-7e62-19679f63e5c9.jpeg)
# 初めに
家庭内で家族が使えるお小遣いアプリをRuby on Railsで作っているのですが、少しでも維持費を抑えるためにRaspberry Piを自宅サーバーにしてその上で動かすことにしました。
ただし、今回はあくまで自宅内でのサービス限定とし外部には公開しません。# 前提条件
– Raspberry Pi 5を使用
– OSインストール、初期設定、ネットワークの設定は済んでいる
– 消費電力を抑えるために無線LANはOFFにしている
– sshで接続できるようになっている# 下準備、環境アップデート
“` bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rsi-update
sudo rpi-upda
Rspec で特定種類のテストだけを対象に before / after を設定する例
# 例
system test の全てのテストケースを対象に `before(:each)` の処理をさせる場合
`rails_helper.rb` に以下を設定
“`rb
RSpec.configure do |config|
config.before(:each, :type => lambda { |spec_type| spec_type == :system}) do
…
end
end
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
# プロフィール・経歴
https://github.com/YumaInaura/YumaInaura
【Rails7.0】nomethoderror: undefined method ‘raw_filter’
## 概要
Rails6.1から7.0にアップデートした際、発生したタイトルのエラーに関して備忘録です### エラー内容
“`
NoMethodError: undefined method `raw_filter’
“`### 解決法
エラーが発生した時のスタックトレースを確認したところ `activerecord-import` が怪しかったのでリポジトリを確認したところ最新にしなくてはいけなかったので最新にしたところ解決した
heroku run rails db:migrateでdbに接続ができないエラーが出た。
自分用備忘録です。初心者なので、間違っていることや、理解が違っていることがありましたら、教えていただけると幸いです。
## 問題
deviseでメール認証機能をつけたアプリをherokuにデプロイしようとした際、dbが見つからないというエラーが出た。## 解決方法
database.ymlファイルのproductionに
“`url: <%= ENV['DATABASE_URL'] %>“` を追加する。#### [解決までの過程(記録用)]
deviseで管理者機能をつけたアプリをherokuにデプロイ。
“`ruby
% git push heroku master
“`HerokuのダッシュボードのResourcesからadd on設定
postgresqlを選択データベースの設定が完了したので、
“`ruby
% heroku run rails db:migrate
“`下記のエラーが発生しました。
“`ruby
Running rails db:migrate on ⬢ hidden-journey-8
【Rails】Support for calling #default_scope without a block is removed.
## はじめに
Railsのアップデート中にdefault_scopeを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
コード
“`ruby
default_scope order(“created_at DESC”)
“`エラー文
“`ruby
Support for calling #default_scope without a block is removed. For example instead of `default_scope where(color: ‘red’)`, please use `default_scope { where(color: ‘red’) }`. (Alternatively you can just redefine self.default_scope.)
“`## 解決方法
以下のように修正します。
“`ruby
default_scope { order(“created_at DESC”) }
“`## 参考
https://stackoverflow.com/questions/3
Railsガイドへコントリビュートするまでの経緯とそこから得られたもの
## はじめに
僕はエンジニアになって約1年です。
これまでOSS活動とは無縁だったのですが、ここ1ヶ月くらいでRailsガイドの日本語版・英語版の修正によるOSSコントリビュートが複数回できました。
日本語版(全4件)
https://github.com/yasslab/railsguides.jp/pulls?q=is%3Apr+author%3Akazuyainoue0124+is%3Aclosed+
英語版(全3件)
https://github.com/rails/rails/pulls?q=is%3Apr+author%3Akazuyainoue0124+is%3Aclosed+
どれも誤字脱字を修正しただけですが、この経験を通じてドキュメント修正がOSS活動の第一歩として最適だと肌で感じました。
そこでこの記事では、Railsガイドにコントリビュートするまでの経緯とその過程で得られたものについて、自らの経験をもとにまとめます。
– OSSってなんだか難しそうだけど挑戦してみたい
– ドキュメント修正
全てのモデルを列挙する
# やりたいこと
全てのモデルを列挙したい。
# 方法
“`rb
# 開発環境だとクラスが自動読み込みされる。
# このままだと読み込み済みのモデルしか列挙できないので、明示的に一括読み込みしておく。
# 規模が大きい Rails アプリケーションだと時間がかかる。
Rails.application.eager_load!# 全てのモデルを列挙する。
# ApplicationRecord のような抽象クラスは除外する。
ActiveRecord::Base.descendants.reject(&:abstract_class?)
“`# バージョン情報
※ 現時点での最新のバージョンではありません。
“`rb
RUBY_VERSION
#=> “3.1.2”Rails.version
#=> “7.1.4”
“`
【Rails】RSpecでのテスト時に詰まったところ~画像の添付、postリクエスト時のパラメーター付加など~
## はじめに
ここまる2日かけてRSpecを使ったテストコードを書いていました。
その中で、’この内容をテストしたいけどどう書いたらいいんだろう…?’と思うものがたくさんあったので、まとめておきます。## 少し悩んだテスト内容と記述方法
### Model Spec
#### user_idとpost_idのペアにつけている一意性制約のテスト
“`ruby
require ‘rails_helper’RSpec.describe Like, type: :model do
context ‘同じポストにいいねしようとした場合’ do
let!(:user) { create(:user) }
let!(:post) { create(:post) }let!(:like1) { create(:like, user: user, post: post) }
let!(:like2) { build(:like, user: user, post: post) }before do
like2.save
Docker, docker-compose, rails を使って、HelloWorld を表示する。
## 目的
docker, docker-compose, rails を使って、HelloWorld を表示する。## 環境
EC2 ubuntu## 前提
・Vscode の Remote SSH を使う。
・3000 ポートのポートフォワーディングができている。## 手順
(1)
“`
~$ sudo apt update
~$ sudo apt install docker.io docker-compose
~$ sudo systemctl start docker
~$ sudo systemctl enable docker
~$ mkdir rails_api
“`
vscode で rails_api フォルダに移動
“`
~/rails_api$ docker-compose –version
~/rails_api$ sudo apt remove docker-compose
~/rails_api$ DOCKER_COMPOSE_VERSION=2.20.3
~/rails_api$ sudo curl -SL https://githu
docker, docker-compose を使って rails 開発を行うときのコマンド
## docker コマンド一覧
(1) 一覧
“`
$ docker ps -a
$ docker ps
$ docker images
“`
(2) ログ
“`
$ docker logs
“`
(3) 構築
“`
$ docker-compose stop
$ docker-compose down
$ docker-compose build
$ docker-compose up
“`
(4) 破壊
“`
$ docker container prune
$ docker images prune -a
$ docker images prune
$ docker system prune -a
$ docker volume prune
“`## rails コマンド
(1) ファイル生成
“`
$ docker-compose run web bundle exec rails generate model Hello
$ docker-compose run web bundle exec rails generate
Swaggerを使って RubyonRails ✖︎ WebAPI 作成してみた
# はじめに
現在友人依頼の作付計画アプリを作成中です 🌱
作物マスターのAPIあったら楽だなーと思いつつ(あるっぽい👀)
根幹機能なのでやめときました💦seedファイル使って手動でぽちぽちマスター登録をしているので、せっかくならWebAPIに挑戦してみようと思います!
初心者ですので、間違い等ありましたらご指摘いただけますと幸いです!
# この記事の目標
– RubyonRailsのseed機能を使って作成した作物マスターをWebAPIで公開する# この記事でやらないこと
– 前提知識や細かい設定の説明前提知識などは、下記の記事を参考にしています!
https://qiita.com/KNR109/items/d3b6aa8803c62238d990
https://qiita.com/KNR109/items/7e094dba6bcf37ed73cf#commponents
# Swagger
SwaggerとはOpenAPIを利用しREST APIを設計するために使用するツールセットのことです公式ドキュメント
https://swagger.io/do
Dockerで「docker compose exec web bin/dev」がうまくいかないときの対処法②
## 初めに
疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。## 起こったこと
config/initializers/ransack.rbを記述すると
「docker compose exec web bin/dev」が上手くいかなくなった## 対処法
“`:ターミナル
docker compose restart
“`
これです。この後は上手くいきました。
ちなみに
“`:ターミナル
docker compose down
“`
のあともう一度docker compose upをしても上手くいかなかったです。
あくまでも再起動するのが大事みたいです。
findとfind_byの使い分けについて
## 前提
内容は浅いですが、個人学習中の備忘録を目的として残しておきます。## モデル.find
“`ruby
User.find(1)
“`findメソッドで取得する値は、DBに存在している前提で実行されるため、値が存在しない場合は、`ActiveRecord::RecordNotFound`という例外が発生する。
### 用途
必ず該当する値が存在しなくてはいけないモデルに対して使う。
万が一、存在しない場合は例外が発生するため、例外処理も実装しておく必要がある。## モデル.find_by
“`ruby
User.find_by(email: ‘example@aaa.com’)
“`find_byメソッドは、該当する最初の値が取得されるが、値が存在しない場合は例外を発生させずnilを返す
### 用途
あらかじめ、値が存在しないケースがあると判断できている場合に使う。#### find_byとwhereについて
“`ruby
User.find_by(email: ‘example@aaa.com’)
User.where(email
RSpecでCapybaraのvisitメソッドを実行するとSelenium::WebDriver::Error::WebDriverErrorが出てしまう件
## エラー
“`
Selenium::WebDriver::Error::WebDriverError
“`
RSpecで`capybara`のvisitメソッドを使用時にエラーが出た。
どうやら、WebdriversがブラウザドライバーであるChromedriverと対応可能なバージョンが見つからないためエラーが起きているよう。(Webdriversはブラウザを自動操作するためのブラウザドライバーを管理するRubyのテストフレームワーク)
<エラー時のgemファイル>
“`ruby
group :test do
gem ‘capybara’, ‘3.38.0’
gem ‘selenium-webdriver’, ‘4.8.3’
gem ‘webdrivers’, ‘5.2.0’
end
“`## 解決方法
Webdriversを削除しcapybaraとselenium-webdriverを特定のバージョン以降に設定する“`ruby
group :test do
gem
【Rails】メンション付きコメントがあった際にメールで通知をする方法
## はじめに
Webアプリでよくある、@username でメンション通知をできる機能を実装したので、やり方を残しておきます。### 学べたこと
– `after_create`などのコールバックを使う際のデータの扱い方
– メールを送りたいときのメソッドの作り方
– 絶対リンクの作り方## やりたいこと
ポストに対してのコメントで’@username’と記述した際にメンション通知を飛ばしたい。
メール送付は非同期処理で行いたい。### 前提
– Redisとsidekiqを導入## やり方
### 方向性
1. メンション通知用のメソッドをMailerを作って実装
1. viewの作成
1. `after_create`を使って、Commentモデル内にメール送付のメソッドを定義
1. 保存したコメントの内容から’@’に反応してusernameを検知
1. もしメンションされていたら、メールを送信### Mailerの内容
“`ruby
class CommentsMailer < ApplicationMailer def mention