Rails関連のことを調べてみた2022年09月12日

Rails関連のことを調べてみた2022年09月12日
目次

Elastic BeansTalkのlogrotateについて

## ログローテーションについて
Elastic BeansTalkのログローテーションについて調査をしたので、内容をまとめておきます。

### ローテーションの設定
※以降はPumaのログについて記載していきます

デフォルトの設定で、1時間に1度、該当ログのファイルサイズが10MBを超えていたらローテーションするようになっていました。
1時間に1度の契機は、下記cronジョブによって呼びだされます。
“`terminal
/etc/cron.hourly/cron.logrotate.elasticbeanstalk.puma.conf
“`

ローテーションの設定ファイルについては下記コマンドで確認できます。
“`terminal
$ less /etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.puma.conf
“`

“`conf:logrotate.elasticbeanstalk.puma.conf
/var/log/puma/* {
su root root

元記事を表示

minitestでRailsをテストする際に使える検証メソッドの一覧と、そのメソッドに対応するAPIドキュメントのまとめ

## はじめに

Rails標準のテスティングツールはminitest(をベースにRailsが独自拡張したもの)です。

現場ではRSpecがよく使われるとはいえ、Rails標準のminitestを使っている方も中にはおられると思います。

Railsのminitestには`assert`や`refute`(または`assert_not`)で始まる検証メソッドが数多く定義されていますが、かなり数が多いため全メソッドを把握している方は少ないのではないでしょうか。

また、それら検証メソッドは、

– minitestがデフォルトで提供しているもの
– Railsが独自に提供しているもの
– Capybaraのような外部gemが提供しているもの

など様々です。そのため、メソッドの使い方を調べたくてもどのドキュメントで解説されているのかわからない、ということがよくあります。

そこでこの記事では、Railsのminitestではどんなメソッドが使えて、そのメソッドの使い方を調べたいときはどのドキュメントを見にいけばいいのかを一覧化してみました。

minitestでRailsのテストを書く

元記事を表示

【Ruby】特定のレベルよりも重要なログのみを出力したい

# 概要
開発時にはデバッグログまで記録し、運用時には重要なログしか残さないという制御をするには、Logger#levelメソッドでログを記録するしきい値を指定します。

# LOGの段階
* 6段階のログレベルに分けてログを記録します。

* UNKNOWN
* 常に記録されるべき不明なエラー

* FATAL
* プログラムをクラッシュさせるような制御不可能なエラー

* ERROR
* 制御可能なエラー

* WARN
* 警告

* INFO
* 一般的な情報

* DEBUG
* 低レベルの情報

* Logger#levelメソッドにINFOを設定した記載例
“`ruby
require ‘logger’

log = Logger.new(STDOUT)
log.level = Logger::INFO #INFO以上のログのみ出力

log.debug(“debug message”)
log.info(“info message”)
log.warn(“warn message”)
“`

上記の記載例だとINFOよりも重要度の低い情報は記

元記事を表示

【EC2】DB作成時エラーのためにVimを使ってEC2内のファイルを編集

# エラー状況
railsによるアプリケーションの環境をdockerで構築し、以下のコードをEC2の中で実行し、データベースを作成しようとした。
“`
docker-compose exec app rails db:create db:migrate RAILS_ENV=production
“`
すると次のようにエラーが返ってくる。
“`
/usr/local/bundle/gems/spring-4.0.0/lib/spring/application.rb:101:in `block in preload’: Spring reloads,
and therefore needs the application to have reloading enabled.
Please, set config.cache_classes to false in config/environments/production.rb.
(RuntimeError)
“`
要するにconfig/environments/production.rbに書かれてある、config.cac

元記事を表示

SQLの練習ができる学習サービス「SQLab」を作ってみた

# はじめに
![sqlab-min.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1074872/d8013e1c-7b65-0242-3de4-38778c2b94e5.png)
こんにちは、[タケ](https://twitter.com/take_paolo)と申します。
SQLの練習ができる学習サービス「SQLab」を作りました。

https://sqlab.net/

※ PC専用です。
※ 推奨ブラウザはGoogle Chromeです。

# なぜ作ったの?
SQLを学び始めた当初は **「SQLってなんか難しそう」** というイメージでしたが、
練習問題を解いていく中で次第に自力でクエリを組み立てることが **「クイズみたいで楽しい」** と思うようになりました。
そこでもっと多くの練習問題を解いてみたい、もう少し難易度の高い練習問題を解きたいと思ったのですが、

・無料でバリエーション豊かな多くの練習問題に取り組める
・環境構築不要でブラウザ上ですぐに実践できる
・シンプルで使いやす

元記事を表示

Schema.rb(スキーマファイル)のまとめ

[rails初心者]Schema(スキーマ)のまとめ ※自分用

初めに

Schemaについてまとめてみました。

※自分用でまとめてますので、分かり辛かったらすいません。
 また理解不足・誤りがあったらコメント頂けますと幸いです。m(__)m<ヨロシクオネガイシマス

前提条件

すでにBookモデルが作成されていること

※じゃあモデルを作成していないとだめなのか?と思った方・・・実はそうでもないんです!!
 schemaファイルは**デフォルトであるファイルになる**ので、モデルを作成していなくてもファイルは存在します
 ただ何も書かれていない状態になります(;^ω^)

主なやること

特になし

ご自身で確認したい人は・・・

①モデルの作成(rails g model 任意のモデル名)&migrateファイルの編集(任意のカラムを一つか二つ作ってみて下さい)
 →忘れずに「rails db:migrate」
②Schemaファイ

元記事を表示

初めてのウェブサービスに縦書きエディタを選んだ理由(3)

# 1.はじめに
 GIGAスクール構想で児童・生徒が使うChromebook用に、縦書き原稿用紙の機能をウェブで提供しようと開発した作文ウェブアプリ「[sakubun](https://www.sakubun.tokyo)」。これまで、[初回](https://qiita.com/tategaki3/items/14266860629892376d29)に原稿用紙をどうやって実現したか、[2回目](https://qiita.com/tategaki3/items/1b779a2397c47d6c27b9)には作成した原稿の保存・ダウンロード機能の実装をご紹介してきました。3回目はページネーションをどうやって実装したかをご紹介します。

https://www.sakubun.tokyo/

# 2.ページネーションとは
 ページネーションとは、ページ割りやページ送りのことで(正直、実装の必要性を感じるまでそんな言葉があることも知りませんでしたが……)、Googleで検索すると一番下に出る数字でページが選べるやつです。

 原稿用紙というとやはり縦20字詰め、横20行の計400字詰め

元記事を表示

Ruby on Rails link_toのパスの引数に.idって、いるの?いらないの?(自分用メモ)

# はじめに
Ruby on Railsのlink_toの読み方についてなんとなく理解したので
自分用メモとして投稿します。
(自分にしかわからない書き方となっていること、ご了承ください:bow:)

# link_toのパスの引数に.idって、いるの?いらないの?

#### link_toの記述方法
“`
<%= link_to "表示したいテキスト", url又はパス %>
“`
補足:link_toのHTTPメソッドは特に設定しなければGETになる。
   そのため、もし設定したい場合は下記のようにmethodオプションを設定すること
“`
<%= link_to "表示したいテキスト", url又はパス, method: :HTTPメソッド %>
“`

#### 今回のコード
“`show.html.erb
<%= link_to "編集", edit_list_path(@list.id) %>
“`
コードの意味:ブラウザに”編集”と表示させるよ。
       ”編集”を押すとedit_list_path(@list.id)に飛ぶよ。

#### 疑

元記事を表示

【Rubocop】rubocop -Aを実行する前はexcludeを設定しておく

# Rubocopの自動修正
Rubocopの自動修正、rubocop -a や rubocop -Aは痛快なコマンドで、間違っているところを一括で全部直してくれる。使った後はなんか清々しい気持ちになる。
ただし、初めて利用する際の注意点もある。
それは、実行前にRubocopをよく設定していなければ、Rubocopの対象とすべきでないファイルにも自動修正をかけてしまうことである。
これをやってしまうとgithubでPRした時にchangedのファイル数がえげつないことになる.

# rubocop.yml
rubocop.ymlにあらかじめ対象から除外したいファイルを指定しておくのが良い。
以下は設定の一例である。
“`AllCops:“`の下に“`Exclude“`とある。この下に除外したいファイルを指定していく。ここで“`*“` はワイルドカードなので“`bin/**/*“`と指定しておくことでbin以下のファイルを全て対象外とすることができる。
“`yaml:rubocop.yml
inherit_from:
– .rubocop_airbnb.yml

元記事を表示

【個人開発】1週間で約2,000人に使ってもらえたReactアプリをリリースするまでにしたこと

## 今回リリースしたアプリ
– Destiny2というマイナーなFPSゲームの診断ツール(スマホ専用)
https://destiny-tolls.com/
![スクリーンショット 2022-07-30 16.59.48 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/82b4a0f0-4789-a7d7-737c-7746450f9933.png)

## 使用技術
### フロント
– React 17.0.2

### バックエンド
– Ruby 2.7.5
– Rails 6.1.5

### インフラ
– Heroku
– cloudflare

### その他(数値計測)
– GoogleAnalytics(GA4)

## このアプリを作った背景
– きっかけはReactの勉強でした。

– 勉強するなら何かアプリ作りながら勉強した方が楽しいので、私の好きなゲームのDestiny2に関するアプリ作ろうと思いました。

– Destiny2というゲー

元記事を表示

ActiveHashを用いたプルダウンメニューでの検索機能の備忘録

オリジナルの写真投稿アプリを制作した際にActiveHashを用いたプルダウンメニューでの検索機能を実装したので備忘録に残します。
ransackを用いて実装しています。
ActiveHashの作成については書いていません。

### Gemの導入
Gemfileの最下部へ以下を記述してインストール
“`
gem ‘ransack’
“`
“`
bundle install
“`

### ルーティングを設定
検索結果を一覧で表示したいので検索結果ページへのルーティングを記述する
collectionオプションでpostsコントローラー内のseachアクションに繋がるように設定
“`:routes.rb
resources :posts do
collection do
get ‘search’
end
end
“`

### コントローラーにseachアクションを記述

“`:posts_controller.rb
def search
@q = Post.ransack(params[:q])
@items = @q

元記事を表示

【Ruby on Rails】愛犬管理アプリpart3 ~体調管理編~【初心者向け】

# はじめに
この記事は、[こちら](https://qiita.com/tak8_al/items/08274dd9228363642555)の記事の続編です。
まだご覧になっていない方は是非ご覧ください。

# 実装内容
本記事では、簡単なCRUDアプリの作成と、検索機能の付与を行います。

手順は以下になります。
①体調に関するCRUD機能を持ったアプリケーションの作成
②体調に関するキーワードで検索できる機能の作成
③体調ペットの表示&体調を登録したユーザーの表示

![スクリーンショット 2022-09-12 午前10.15.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1973643/a899ca2f-c195-f022-427a-aa960405ee91.png)

ではさっそく実装していきましょう。

# ①体調に関するCRUD機能を持ったアプリケーションの作成
以下のコマンドを実行してください。
③、④の機能の実装のために、アソシエーションが必要なので、外部キーも設定しておきま

元記事を表示

ignored_columns が意図せず上書きされるのを防ぐ

## [ignored_columns](https://edgeapi.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns) が意図せず上書きされる可能性のあるコード
一つのモデルで既に ignored_columns をセットしていた場合に、誤って新規に ignored_columns をセットしてしまうと本来使われたくないカラムが使われてしまう不具合が引き起こされる恐れがある。

“`rb
# あるモデルの10行目に ignored_columns がセットされている
self.ignored_columns = %w(foo bar)

# 10行目に気づかず別の行に新規で書いてしまうと10行目の ignored_columns は上書きされ、
# foo, bar のカラムが意図せず利用可能になってしまう
self.ignored_columns = %w(baz)
“`

## これを防ぐためには
以下のように変更するだけ

`

元記事を表示

オリジナルアプリのコメント機能を非同期で投稿出来るように変更した時の備忘録

オリジナルの写真と投稿アプリを作成した時にコメント機能に後からAjaxで実装してみようと思ったらかなり手こずったので忘れない為に備忘録を残します。
投稿した写真にログインしたユーザーがコメント出来る機能になってます。

### コントローラーの編集
投稿した写真の詳細ページにコメントしたいのでアクションはcreateとdestroyの二つ
画面遷移はしたくないのでrenderやredirectの記述はしない
@comment = Comment.find(params[:id])をdestriyメソッドの下に書くと意味がないので一番上に記述する
“`:comments_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = Comment.new(comment_params)
@comment.save
end

def destroy
@comment = Comment.find(params[:id])
@post = Post.find

元記事を表示

【Ruby on Rails】愛犬管理アプリpart2 ~タスク編~【初心者向け】

# 本記事の内容
本記事は、[こちら](https://qiita.com/tak8_al/items/08274dd9228363642555)の記事の続編です。
その記事で実装した内容をもとに、実装していきますので、まだご覧になっていない方は、ぜひご覧ください。
以下の内容の実装方法だけ知りたいという方は、このままご覧ください。

## 本記事での実装内容
① 実行時間の情報を持ったタスクの作成機能
② 当日のタスクのみ表示する機能
③ 全ての実行日の情報を持ったカレンダー作成機能
④ どのペットに対するタスクか表示する機能
⑤ タスクを実行する人間を表示する機能
⑥ 実行時間に自動メール送信する機能
⑦ タスク完了時にメール送信機能

![スクリーンショット 2022-09-12 午前10.12.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1973643/1d6cbdbe-0a08-e64f-cc92-80ca9bea7941.png)

では実装していきましょう。

# 実行時間の情報を

元記事を表示

[エラーメッセージ]”ActiveRecord::PendingMigrationError”解決までの流れ

# 1.前提条件
#### 開発環境
Ruby:ruby 3.1.2
Rails:Rails 6.1.6.1
OS:Windows11 Home

# 2.エラーメッセージの内容

![error_img](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823804/86d78dc1-3403-0fb3-1814-8ee88992c7f5.png)

#### ②エラーメッセージ翻訳
エラーメッセージを翻訳する
 
 ”移行は保留中です。 この問題を解決するには、次を実行します。
  bin/rails db: RAILS_ENV=development を移行
  保留中の移行が 1 件あります:
  20210727061455_create_books.rb”

#### ③エラーの原因を考える (※考えられる原因は随時追記することとする。)
今回のエラーはmigrateし忘れているというものである。
考えられる理由を下記に記述する。

 ・単純にrails db:migrateし忘れている

#

元記事を表示

本番環境でActionMailerを動かす 【Rails Heroku Gmail】

## 環境

– Ruby3系
– Rails6系
– Heroku
– Gmail
## 実現したいこと
– ActionMailerを使って本番環境でパスワードリセットメールを送信できるようにしたい。
## 現状

– 本番環境でメール送信できない。(ActionMailerがうまく動かない)
– 開発環境ではうまく動いている。(letter oppner webで確認した。)
– エラーがいくつか発生した。`Rails Missing host to link to!`や`Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at)`**といったエラー。
## 解決策
一言で言うとdevelpment.rbの編集とGmailの設定をしないといけない。
これをやっていなかったのでうまくいかなかった。
## Gmailの設定
Gmail側の設定については以下の記事が参考になった。
[https://skillhub.jp/courses/137/lessons/97

元記事を表示

Basic認証の導入(健忘録)

## RailsのAppにBasic認証を導入する

全てのコントローラーで行いたいため`application_controller.rb`に記述する

“`app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] # 環境変数で呼び出す end end end ``` ## (補足) 環境変数の設定 vimコマンドで設定ファイルの`.zshrc`に記述する ```:ターミナル % vim ~/.zshrc ``` 通常モー

元記事を表示

編集ページをモーダルで表示したのでメモ

### Bootstrapでモーダルを使用した投稿機能を実装したので編集もモーダルで編集したかったので実装してみた

Bootstrap5とJQueryはCDNで読み込んでいる。
コントローラーは通常通り記述
“`:recioes_controller.rb
def index
@recipes = Recipe.all
@recipe = Recipe.new
end

def create
Recipe.create(recipe_params)
@recipes = Recipe.all
end

def edit
@recipe = Recipe.find(params[:id])
end

def update
@recipe = Recipe.find(params[:id])
@recipe.update(recipe_params)
redirect_to root_path
end

def destroy
recipe = Recipe.find(pa

元記事を表示

ActionCable ルーム別チャット

## やりたいこと
複数のチャットルームが存在し、チャットルームごとにメッセージを表示する。
## やるべきこと
これを実現するには「ユーザーがどのチャットルームに属しているか」という情報を、ActionCableの各処理に渡さなければいけない。
## 前提
リアルタイムチャット機能は既に実装済み。
## 用語
ルーム別チャットを実現するにはActionCableに関する用語やデータの流れを理解しておいた方が捗る。この図説付きの記事が分かりやすかった。([https://qiita.com/ksugimori/items/d5f4630858eeb56d9da5](https://qiita.com/ksugimori/items/d5f4630858eeb56d9da5))
## 手順
1. チャットルームにid属性を持たせる
2. ビューから特定のユーザーとチャットルームの情報を取得する
3. 取得したユーザーとチャットルームのパラメータをサーバー側に送る
4. パラメータをもとにデータを取得する
5. パラメータをもとにストリームを作る
6. ストリームを指定してブロードキャスト

元記事を表示

OTHERカテゴリの最新記事