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

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

rails devise サインアウトのリダイレクト先設定時のエラー

### devise サインアウトのリダイレクト先設定時にエラーのが起きてしまう原因について

### 初めに
___
こんにちは。DMM WEBCAMP Advent Calendar 2021 8日目を担当します@Hbk__17です!
普段受講生さんに教えていた際に、よく受講生さんがつまづいていた箇所で「deviseを使用した際のログアウトの条件分岐でエラーが出てしまい直せません」といったような質問をよく頂いていたのですが、しっかり解説をしている記事を見かけなかったので、今回私の記事ではなぜこのようなエラーが出現するのかについてと、どのように直せばいいのかを解説していければと思っております!先に早くエラーを治したいという方は[こちら](#今回のエラーの解決方法)をご参照ください。

### エラーについて
***
今回主に解説を行うエラー文は、deviseを使用した際のログアウトを設定した際に起こるこのエラー↓について解説したいと思います!
![スクリーンショット 2021-11-29 13.35.13.png](https://qiita-image-store.s3.ap-no

元記事を表示

Goreplayを入れた話

エイチームフィナジーアドベントカレンダー8日目は私 @NMura3 が担当します。

## 概要
サービス運用していると、プログラム言語やフレームワーク、OSやライブラリーのバージョンアップがつきまといます。
その際に起きてほしくはないですが、障害が発生してサービス停止する場合があります。
どんなに入念にテストしたり、準備をしても一定数発生してしまうことはありませんか?

そんな時に便利に検証できるのがGoreplayになります。

## Goreplayとは
GoReplayはGoで開発されたOSSのネットワークモニタリングツールです。
https://goreplay.org/

流れてくるリクエストをキャプチャして、他のサーバーに同じリクエストを流すことができます。
つまり、テスト環境やステージング環境に本番にくるリクエストを流して、本番のリクエストでテストが可能になります。

また、リクエスト数も本番と同様になるので、負荷テストも可能です。

![go-replay.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【Rails】RSpec、Capybara、FactoryBotの使い方

##テスト用ライブラリ
・RSpec
 RubyにおけるBDD(振舞駆動開発)のためのテスティングフレームワーク。
 Rspecを利用する上で、「テスト」ではなく「spec」という用語を利用する。

・Capybara
 WebアプリケーションのE2E(End-to-End)のテスト用フレームワーク。Rail5.1からRailsに同梱済。
 MinitestやRSpecなどのテスティングライブラリと合わせて使う。

・FactoryBot
 テスト用データの作成をサポートするgem。
 テスト用のデータを簡単に用意し、テストから呼び出して利用することができる。
 一般にデータを作成することを簡単にする仕組みは「ファクトリ」と呼ばれている。

##事前準備
####Rspec
Gemfileにて以下の文を追加し、RSpecのRails用の機能が追加される。

“`
gem ‘rspec-rails’,’~>3.7′

$bundle install
“`

gemのインストールが終われば、以下のgenerateを実行。

“`
$ rails g rspec:install
“`

元記事を表示

【Ruby】map.with_index

##with_index
配列などの要素にindexを添えることができるメソッド

“`ruby
[100, 200, 300].map.with_index do |n, idx|
p [n, idx]
end

#=> [[100, 0], [200, 1], [300, 2]]
“`

##each_with_index

“`ruby
[100, 200, 300].each_with_index do |n, idx|
p [n, idx]
end
# => [100, 0]
# [200, 1]
# [300, 2]
“`

https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_with_index.html

元記事を表示

【Ruby】インクリメント++の代わりは+=

##インクリメント
変数の値を1増やす演算。

Rubyではインクリメント“`++“`がないので、代わりに“`+=“` “`succ“` “`next“`を使う。

“`ruby
sum = 0
sum += 1
puts sum

#=> 1
“`

“`ruby
sum = 0
sum = sum.succ
puts sum

#=> 1
“`

##デクリメント
変数の値を1減らす演算

Rubyではデインクリメント“`–“`がないので、代わりに“`-=“`を使う。

“`ruby
sum = 0
sum -= 1
puts sum

#=> -1
“`

元記事を表示

草稿

更新一篇草稿

元記事を表示

【Rails】配列をキーでsortしたい

配列をpriceの昇順でsortしたいとき

“`ruby
array = [
{‘id’=> 1, ‘price’=> 300},
{‘id’=> 2, ‘price’=> 100}
]
“`

なんとなくキーを指定したらsortできたようなーと思ったけどできなかった。

“`ruby
array.sort(:price)
#=>ArgumentError (wrong number of arguments (given 1, expected 0))
“`

sort_byでブロックの中でキーを指定する。

“`ruby
array.sort_by { |a| a[‘price’] }
#=> [{“id”=>2, “price”=>100}, {“id”=>1, “price”=>300}]
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html

元記事を表示

【Ruby】nextとreturn

map関数などの繰り返しの処理の中で、
ある条件のときだけ次のループに行きそのまま処理を続けたいときはreturnじゃなくてnextを使う。

##next
nextはもっとも内側のループの次の繰り返しにジャンプします。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#next

“`n + 1“`が偶数のときに“`puts “hello! #{n + 1}回目”“`を実行せずに次のループにいく。

“`ruby
def next_method
5.times do |n|
next if (n + 1).even?
puts “hello! #{n + 1}回目”
end
puts “完了!”
end

next_method

#=>hello! 1回目
#=>hello! 3回目
#=>hello! 5回目
#=>完了!
“`

##return
式の値を戻り値としてメソッドの実行を終了します。

https://docs.ruby-lang.org/ja/lat

元記事を表示

RailsのAPIサーバーのレンダリングを速くしました

この記事は[Akatsuki Advent Calendar](https://adventar.org/calendars/6566) 7日目の記事です。
前回は jyllsarta さんの[ほぼ素のRailsアプリだった「スピカとチロル」が本番環境で安定動作するまで](https://jyllsarta.net/stray_release)でした。

# TL;DR
Jbuilderが遅いから、MVCを保ちつつjsonのレンダリングを速くできる仕組みを作った話です。
Gemを公開したので、よかったら使ってみてください!
https://rubygems.org/gems/simple_json
詳しくは github で見てね!
https://github.com/aktsk/simple_json

# なぜ作るか
RailsでAPIサーバーを書き始めて2年くらいの頃、負荷改善が好きで、毎日New Relic を眺め、APIの負荷改善をしていました。遅いAPIの改善をしていた際に、partialを展開することでレスポンス時間がかなり改善したことがありました。それで疑問を持ち始め

元記事を表示

Ruby rubocop 「Metrics/CyclomaticComplexity: Cyclomatic complexity for index is too high.」エラーへの対処

# 1.状況

ruby 2.6.3p62
rails 5.2.6

Gemfile にコーディングを精査するrubocopをインストールして実行したところ
以下のような警告が発生した

“`
app/controllers/public/posts_controller.rb:3:3: C: Metrics/CyclomaticComplexity: Cyclomatic complexity for index is too high. [11/7]
def index …
“`

該当箇所のコントローラーファイルは以下のようになっていた。

“`app/controllers/public/posts_controller.rb
class Public::PostsController < ApplicationController def index # デフォルトは更新日時の降順に並べる @posts = Post.all.order(updated_at: 'DESC').page(params[:page]).per(10) @r

元記事を表示

Ruby ハッシュ 基本を復習

ハッシュの中身は

hash = { キー:値 }

hash = {key:value}

です。

中にいくつかのキーと値があるとして

hash = {key1:value1,key2:value2,key3:value3}

それらをオブジェクト.keysつまりこの場合では、puts hash.keysで

key1

key2

key3

と出力されます。

valueにもあり、puts hash.valuesで

value1

value2

value3

 出力されます。

元記事を表示

【備忘録】デプロイ関連でエラーが起きたとき(反映されない場合も)の対処法

## デプロイ時に何らかの原因で反映がされない場合の対処法
### ①unicorn を見てみる
本番環境でunicornを見てみる。

“`
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ ps aux | grep unicorn
“`

“`
ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep –color=auto unicorn
“`

“`
[ec2-us

元記事を表示

Railsで使えそうな処理のメモ書き

気が向いたらメモを追加していく

### モデルクラス一覧取得
ファイル名からクラスを取得してモデルのやつだけ集める(参考[^1])

“`.rb
constants = Dir.glob(File.expand_path(“./app/models/*.rb”, Rails.root)).map do |f|
name = File.basename(f, “.rb”).camelize
Object.const_get(name)
end
models = constants.filter |constant| do
constant.instance_of?(Class) && constant< ActiveRecord::Base && !constant.abstract_class? end ``` [^1]: https://kitak.hatenablog.jp/entry/2013/11/10/195254

元記事を表示

ECS/fargateでタスクが終了してしまう場合のデバッグ方法【Rails】

# はじめに

RailsアプリをEC2からECS/fargateに移行するに当たり、
なかなかタスクが起動できませんでした。

その大きな要因は
**`タスクが終了してしまうエラー原因`**を
**`AWSコンソール画面やCLIでどうやって確認するか`**が
分からなかった為でした。

という訳で、自己整理用に
**`ECS/fargateはどうデバッグしていけば良いか`**をまとめています。

# 使用技術
* AWS(ECS/Fargate)
* Rails6(Ruby2.7)
* MySQL8

# エラー確認方法
1. マネジメントコンソールのECS画面を確認する
2. マネジメントコンソールのCloudWatch画面を確認する
3. コンテナに接続後、Railsの本番用ログを確認する

# 1. マネジメントコンソールのECS画面を確認する

AWSマネジメントコンソールのESC画面に表示されるエラー文から
タスクが停止してしまった原因を確認する方法です。

では、以降はコンソール画面を参照しながら説明します。

まず、AWSの提供サービスからECSを検索します。
!

元記事を表示

【Rails】OpenSSLが1.1.1なのにLet’s Encryptの証明書でverify errorが発生する

2021年9月30日に発生した、Let’s Encryptのルート証明書の切り替え問題。
Amazon Linux1(OpesnSSL 1.0.2)上で稼働する弊社のRailsアプリケーションもしっかり影響を受けました。
AWSから対応方法についてアナウンスがあったのでその手順に従ってみたものの、イマイチうまくいかず、、、

そこで、ちょうどインスタンスをUbuntu20.04(OpesnSSL 1.1.1)に移行させる予定があったため、
Ubuntu上で稼働するようにアプリケーションを調整して入れ替えれば解決!
と思いきや、依然としてverify errorが発生。

以下は、Ubuntu上で奮闘した対応の記録です。

### 環境
– Amazon Linux1(OpesnSSL 1.0.2)
– Ubuntu 20.04(OpenSSL 1.1.1)
– Ruby 2.5.1
– Rails 6.0.3.6

## OpenSSLのアップデートを試みる
OpenSSLのバージョンが低いと問題が起こるらしいので、バージョン1.1.1といえどアップデートしてみる。

“`bash

元記事を表示

【Rails】ユーザーの状態に応じた対話機能をLINEbotで実現する【LINE Messaging API】

# 概要

本記事は [RUNTEQアドベントカレンダー 2021](https://qiita.com/advent-calendar/2021/runteq) の7日目の記事となります!

個人開発で**ゴミ捨て日を通知してくれるLINEアプリ**を開発したのですが、
その中で実装するのに苦労した「**ユーザーの状態を把握する**」方法を記事にします。

一般的なRailを使用したWebアプリケーションでは、Cookieを利用したユーザー識別やフォームを利用してユーザーの送信する内容を一挙に受け取るなどができますが、LINE Messaging APIではこれらが使えません…

そこで私が実装した、Railsのみでユーザーの状態を保持する方法を紹介します。

これからRails x LINE Messaging API を試してみたい方の参考になれば幸いです。

※ LINE Developperへの登録や設定、基本的な実装についての概要などは他に多数の素晴らしい記事があるため、割愛させていただきます。([こちらの記事](https://qiita.com/Tsuchiy_2/

元記事を表示

DB破壊日記 ~間違えてmigrationファイル消しちゃった編~

#はじめに

こんにちは!!!!!!
[DMM WEBCAMP Advent Calendar 2021](https://qiita.com/advent-calendar/2021/infratop) 7日目を担当します、@tamakiharuNNです!
初Advent Calendar! 初Qiita! です!

チームのアドベントカレンダーのテーマが
「**プログラミングを始めたばかりの人もわかる、ハンズオンや言語基礎**」
ということで
自分がプログラミング始めたての頃に何に困ったっけ~?と考えました。

すぐに見つかりました。
###DB破壊です。
rollbackしてmigrationファイル修正したり(rollbackは適切にやれば問題ありません)
status変更する前にmigrationファイル削除したり

始めた当初は何をしたらどうなるかわからず、
とりあえずやってみよう、壊れたら作り直そ~の精神でハチャメチャやってました笑
(**チーム開発では取り返しがつかなくなるので良い子はマネしないように!**)

というわけで今回は
Railsを始めたての頃の自分に教える

元記事を表示

新卒エンジニアが半年でQiitaを完全に理解する話~バックエンド編~

Qiita Advent Calendar 2021 の 7 日目は、Qiita株式会社 プロダクト開発グループ プラットフォーム開発チームの山田 ( @wataru86 ) が担当します!

https://qiita.com/advent-calendar/2021/qiita

# あらすじ

あるところに Haskell や TypeScript 等の静的型付け言語ばかり書いていたエンジニア見習いがいました。

そんな彼がQiita株式会社(旧Increments株式会社)に新卒入社し、Qiitaを開発するエンジニアとして成長していく様子を、Ruby on Railsに関するちょっと便利なTipsを添えながらお送りいたします。

## 対象読者

– Ruby on Rails初心者
– これから新卒エンジニアとしてWeb系の企業に入社する人
– Rails未経験の新卒を教育をする予定の人
– Qiitaの新卒エンジニアが気になる人

# 第1話「Rails完全に理解した」

内定を承諾し、就活が無事に終わった安心も束の間、入社後うまくやっていけるか不安になっていた僕は、少し

元記事を表示

【Rails】ストロングパラメーターの使い所について【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _ストロングパラメーターの使い方について_
 
 です。 

 ストロングパラメーターが必要なタイミングについて疑問を抱きました。
## 疑問点についての解説

###結論
 マスアサインメント機能を使用した場合にストロングパラメーターの記述が必要。特定のカラムやデータを明示してパラメーターを受け取る場合などには記述する必要はない。

###ストロングパラメーターとは
 ストロングパラメーターとは、Mass Assignment脆弱性の対策として、開発者が指定したキーを持つパラメーターのみを受け取れるように制限するものです。指定していないキーを持つパラメーターをエラーとして弾くことができます。

###パラメーターとは
 パラメーターとは

元記事を表示

railsチュートリアル第十三章 マイクロポストの画像投稿

##マイクロポストの画像投稿
画像付きマイクロポストを投稿できるようにしてみます。
画像アップロード機能を追加するためには、2つの視覚的な要素が必要です。
1つは画像をアップロードするためのフォーム、
もう1つは投稿された画像そのものです。

###基本的な画像アップロード
Railsに組み込まれているActive Storageという機能を用いることです。
Active Storageを使うことで画像を簡単に扱うことができ、画像に関連付けるモデルも自由に指定できます。
平文テキストはもちろん、PDFファイルや音声ファイルといったさまざまなバイナリファイルも扱えます。

“`
$ rails active_storage:install
“`
“`
$ rails db:migrate
“`

####Micropostモデルに画像を追加する
app/models/micropost.rb

“`rb
class Micropost < ApplicationRecord # ApplicationRecordを継承したモデルが作られます belongs_to :user

元記事を表示

OTHERカテゴリの最新記事