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

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

マイグレーションのステータスで表示される、NO FILEを表示させなくするには

## 環境
Rails5.2
Ubuntu20.4

## 内容
不要になったため、マイグレーションファイルを**rm**で削除したのだが、不用意であったため、マイグレーションのステータスを表示すると、**NO FILE**で残ってしまうこととなった。
“`
$ rails db:migration:status
up 20220819003642 ********** NO FILE **********
“`

この**NO FILE**をステータスから削除することとする。まずは、20220819003642_test01.rbという空ファイルを作成してやる。test01の部分は、どのような名前でもOKです。すると、**NO FILE**から、マイグレーションの履歴が復活しました。
“`
$ rails db:migration:status
up 20220819003642 Test01
“`

20220819003642_test01.rbの状態は**up**になっています。削除するには、**down**にする必要があります。空ファイルに、空のc

元記事を表示

Heroku+Railsでバッチ処理を作成する

# 目的
個人開発のRailsアプリで、1日1回メール配信を行うバッチ処理を作る必要があり、調べて実装した時の備忘録です。

メール配信はsidekiqで非同期処理させており、開発環境ではsidekiq-schedularで24時間周期で起動させていました。
しかし、本番環境で利用しているHeroku(無料枠)では、30分でWebサーバがIdleになるため、うまく動作しませんでした。このため本番環境ではHerokuのアドオン(Heroku-schedular)を使った構成にしています。

スモールスタート等でRails+Heroku構成を選択される方は多いと思いますので、参考になれば幸いです。

# 開発環境
+ Rails 6.0.3.3
+ Heroku FreeDyno

# 手順
手順はシンプルです。1はRails、2と3はHeroku側で行います。順を追って説明します。

1. 実行したいタスクをrakeファイルに書く
2. Heroku-schedularをアドオンする
3. Heroku-schedularにスケジューラを設定する

### 1. 実行したいタスクをr

元記事を表示

SIerのSEからWeb系エンジニアに転職して1年間の振り返り

# はじめに
はじめまして。
私はちょうど1年前に大手SIerから実務未経験でWebサービス(SaaS)を運営する少人数ベンチャーに転職しました。
1年経ったので、どんな感じだったか、少し細かめに振り返りを書いていこうと思います。

# 前提
### この記事の意図
単なるポエム・日記です
「1年経ったらこんなことができるよ!」といった例示や主張をしたいわけでなく、単に今後の自分のために整理しておきたく、自分の中だけにとどめておくのも勿体ないので、少しでも誰かの参考になれたらと、アウトプットしておこうと思ったのが背景です。

### どんな環境?立場?
– サービス開始から10年、創業は5年ほどの少人数ベンチャー
– toB&toCの両機能がある自社開発のSaaSを展開
– エンジニアチームは計5〜7名、内訳は以下
– 代表取締役(エンジニアマネージャーも兼ねる)
– 私(エンジニア:最近はシステム運用面のマネージャーも兼ねつつ開発も担当)
– 学生インターンのエンジニア3~5名(フロントエンドとバックエンドの開発担当、インフラは担当外)

# やったこと(経験

元記事を表示

本番環境でFailed to upgrade to WebSocketエラー

### 状況
ローカルでは投稿に対してのコメントができる(ajax)のに、本番環境ではできていなかった。

### 原因
本番環境でactioncableが使えない状況だった

### 解決方法
“`ruby:EC2内
$ sudo vim /etc/nginx/conf.d/rails.conf
“`
以下を貼り付ける。
“`ruby:/etc/nginx/conf.d/rails.conf
upstream app_server {
server unix:/var/www/アプリケーション名/shared/tmp/sockets/unicorn.sock;
}

server {
#省略
# ——————-ここから——————-
# /cableのパスに対してwebsocketの仕組みを用いるための設定
location /cable {
proxy_pass http://app_server/cable;
proxy_http_version 1.1;
proxy_set_header

元記事を表示

【Rails基本編】美少女と学んだ気になれる講座

この講座は、Web業界未経験の**吉野 桜**と、その先輩である**堀切 あやめ**のかわいさをお楽しみいただくため、邪魔にならない程度の差し障りのないWeb技術の話を、お楽しみいただく番組です

## キャラクター

![20220920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/de425bd4-b556-4140-4e9f-52c22fdcd657.png)
吉野 桜: Web業界未経験

![20200920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/8e061b61-cc55-072c-118d-f5f86c2b61ed.png)
堀切 あやめ: Web業界三年目

## 本編

桜「うちのバックエンドってRuby on Railsですよね?」
あやめ「うん、そうだね」
桜「桜、実はRuby on Railsからっきしで……」
あやめ「そうな

元記事を表示

【入門】Ruby eachメソッドの様々な使い方を具体的に紹介

# はじめに
今回は、Rubyに標準で組み込まれている`eachメソッド`について、備忘録としてまとめます。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
Rubyに標準で組み込まれている`eachメソッド`についてアウトプット

# この記事の内容
1. each_with_index
2. each.with_index
3. eachの入れ子
4. each_slice
5. each_key
6. each_value

# 1. each_with_index
eachメソッドと同様に、要素の繰り返し処理を行いつつ、その要素が何番目に処理されたものなのか表示するメソッドです。
eachでループを回しつつ、それぞれのデータ(要素)に番号を振りたい時などに使います。

– 書き方
“`ruby
配列名.each_with_index do |item, index|

end
“`
– 基本的な書き方
“`ruby
#書き方①
foods = [“あんぱん”, “メロンパン

元記事を表示

[Rails7]JavaScriptでTurboを無効化する方法

# リロードしないとJavaScriptが動かない

Rails7のTurboが原因。
JSファイルで`turbo:load`イベントを使用する。

“`javascript:test.js
document.addEventListener(‘turbo:load’, function() {
console.log(‘turbo無効化’);
});
“`

`turbolinks`ではなく`turbo`なので気をつけてください。

参考

https://blog.willnet.in/entry/2021/02/14/154101

元記事を表示

【Rails】GraphQL + Devise認証

# はじめに

Rails API 認証方法として“`devise_token_auth“`を使っているものはよくみるんですが、
既存のサービスで使っている“`devise“`をそのまま使用する実装方法はあまりありませんでしたので記事を書きました。

# 前提

* すでに運用開始している Railsアプリケーションに追加で実装する(APIモードではない)
* “`devise“` を使用する(“`devise_token_auth“` は使用しない)
* 既存の User モデルに適用する
* GraphQL を実装する
* フロント側の実装は割愛

# 構成

認証フローを図にまとめてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/42ba77b4-921b-c352-df95-cada0da156b8.png)

③については、フロント側の実装となりますので、こちらの記事では割愛させていただきます。

# 実装の流れ

* Rails ア

元記事を表示

【Rails】【JavaScript】Ajaxを用いてメモ帳の様なアプリをフォームで作る方法

大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ(@yoma_2003)です!
**Ajaxを用いてメモ帳の様なアプリをフォームで作る方法**をまとめます。

※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。

# はじめに
### やりたいこと
以下の様な**自動更新機能のあるメモ帳(追加・削除できる)アプリ**を作りたい。

![fyj9o-w9rr8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711042/42ed6ece-62d4-4ab8-5d90-3d0b5e097e24.gif)

### アプリの要件
具体的には以下の様な要件を満たすアプリを作成します。
– ページ遷移がない(index.htmlのみ)
– フォームに入力すると、自動で更新される
– 新規ボタンを押すと、フォームが追加される
– 削除ボタンを押すと、フォームが削除される
– 操作後に更新日時が更新される

# 本記事のポイント

**・データ更

元記事を表示

git-secretsでコミットができなくなった場合の対処法

### 環境
ソースツリー

### 概要
git-secretsによって、コミットできなくなった場合の対処法の記事はたくさんあるが、
それでは対処できなかったので、備忘録として残しておく。今回は、一旦git-secretsを完全に取り除いてコミットさせるようにする。

### エラー内容
“`
git: ‘secrets’ is not a git command. See ‘git –help’.
“`

## 解決手順
### ①git-secretsをアンインストールする。
“`
$ brew uninstall git-secrets
“`
これでコミットできるようになったかと思いきや、またしても以下のエラーが出る。
“`
git: ‘secrets’ is not a git command. See ‘git –help’.
“`
調べていくうちに、各リポジトリの「.git/hooks」にある「commit-msg, pre-commit, prepare-commit-msg」の3つを消さなければいけないらしい。

## ② 削除する
該当のリポジトリに

元記事を表示

【Rails】render :json に modelメソッドの返り値を追加する方法

# きっかけ
`controller`の返り値を`json`形式で返却する時、モデルで定義されている`attributes`しか返すことができません。そんな時、他の`attributes`を追加する方法が分からず困ることがあったので、備忘録として残します。

# attributeを追加する
`render json:` に、`methodsオプション`をつけ、`model`で定義したメソッドを呼び出す。

# 使い方
例えば・・・
以下のようなモデルがあったとする。
“`ruby
create_table “users”, force: :cascade do |t|
t.string “first_name”, null: false
t.string “last_name”, null: false
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`

で、以下のようにで`ActiveRecor

元記事を表示

システムスペックではvisit hoge_urlではなくvisit hoge_pathと書かないとNet::ReadTimeoutエラーが発生する

## 発生した問題
Hello worldレベルのごく簡単なRailsアプリを作成し、rspec-railsをインストールして次のようなシステムスペックを書きました。

“`ruby
require ‘rails_helper’

RSpec.describe “Home”, type: :system do
before do
driven_by(:selenium_chrome_headless)
end

example do
visit root_url
expect(page).to have_content ‘Home#index’
end
end
“`

テストを実行すると・・・あれ?

“`
$ bundle exec rspec
DEBUGGER: Attaching after process 28722 fork to child process 28745

(何も起きない)
“`

この状態が何十秒も続き、最終的には以下のエラーが出て終了しました。

“`
$ bundle exec rspec
DEBU

元記事を表示

【Rails】Rails6系にアップデートしたらテストでbut rendering with <["rescues/blocked_host", "rescues/layout"]>というエラーが出た【minitest】

# どうした?
ある程度開発を進めたタイミングでRailsのバージョンを5系から6系へアップしたところ、テストでエラーが出ました。

# 環境
“`terminal
$ ruby -v
=> ruby 3.1.2p20

$ rails -v
=> Rails 6.1.7
(アップデート前: 5.2.8.1)
“`

# 事象
minitestにて
“`
get “/”
assert_template “home/top”
“`
の結果
“`terminal
expecting <"home/top"> but rendering with <["rescues/blocked_host", "rescues/layout"]>
“`
と返ってきました。
もちろんバージョンアップ前はするすると通っていたテストですし、ローカルサーバー上でも問題ありません。

# 解決策

[参照元]((https://qiita.com/Mackey3510/items/7bfaa0b42782de40bc30))の解決策①を試しましたが、テストでのエラーは解決しませんでした。
そこで、`c

元記事を表示

rails で slack command の request を受け取る

# 概要
– slack command など request end point を 設定する
– slack command request から data を取得
– slack command が投入された channel へ応答を返す
– 別記事にて記述

# request end point の設定
– slack app 設定画面を開く
– https://api.slack.com/apps/
– [ slash command ] を開く
– [ Create New Command ] を選択し, 以下を埋める
“`
– Command : command 名を設定
– Request URL : rails の url path を設定 # http://rails.path/ など
– Short Description : command の簡易説明を設定
– Usage Hint : command の使用方法などを設定
“`
– [

元記事を表示

【Ruby on Rails】Railsチュートリアルを参考にログイン機能実装の流れをおさらい

# ユーザの作成

Userモデルにパッと必要そうなカラムを
まず入れてみる。
“`:terminal
rails g model User name:string email:string
“`

一旦migrationする。
“`:terminal
rails db:migrate
“`

ログイン機能とかがないのであれば、
もしかしたら、これでも足りる(?)のかもしれないが、
ログインするためには、
passwordが必要であろう。

セキュリテイーとかをガン無視するのであれば、
単にpasswordカラムをUserモデルに追加して、
そのまま平文で保存すればいいと思うが、
流石にそれはまずいということで、
has_secure_passwordを使うことにする。

そのためには、password_digestカラムが必要になるので、
password_digestをUserモデルに追加する。
“`:terminal
rails generate migration add_password_digest_to_users password_digest:string

元記事を表示

【爆速版】Rails環境構築から自動デプロイまで(M1Mac)

# 1. Dockerのインストール
https://qiita.com/rexid/items/dd3db91b612f0c70097c

# 2. Rails開発環境構築
https://qiita.com/rexid/items/4ea724cef462560039da

# 3. Herokuでデプロイ
https://qiita.com/rexid/items/9ba6b1bb338a3e2b5d8b

# 4. テスト&デプロイ自動化
https://qiita.com/rexid/items/0265e16f11cba57a07cc

元記事を表示

【CI/CD】RailsアプリケーションにCI/CDを構築

# 0. 前提
– Dockerで構築したRailsアプリケーションをHerokuでデプロイしていること

https://qiita.com/rexid/items/9ba6b1bb338a3e2b5d8b

手動デプロイを毎回行うのが面倒なので、**CI/CDを導入しデプロイを自動化する**

## CIとは
– 継続的インテグレーション(Continuous Integration)
– ソースコードを変更してGitHubにアップする度にビルドやテストを自動実行し、コードの品質を一定に保つ方法

## CDとは
– 継続的デリバリー(Continuous Delivery)
– テストを通った変更→レビューOK→マージされたらデプロイを自動的に行う仕組み

## CircleCIとは
– CI/CDを構築するためのサービス
– ビルド・テスト・デプロイをCloud上で行ってくれる

# 1. コードをGitHubにアップする
– Git
– コードはGitでバージョンを管理
– 元に戻せる
– 変更履歴が分かる

元記事を表示

Deviseで、メールテンプレートの編集ができないときの対処法(template_pathではなく、headers_forを使う)

# Rails & deviseにてメールのテンプレートを変更

カスタムメーラー `app/mailers/user_mailer.rb`を、
“`
class UserMailer < Devise::Mailer default template_path: 'users/mailer' end ``` と定義したが、以下のデフォルトのメールが変更できずでした。![スクリーンショット 2022-09-23 18.23.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1730386/90478abf-c56e-e1ff-f6c6-ddf2d34ae8af.png) ## 対応方法 以下のように、headers_forメソッドをオーバーライドすることで、設定したテンプレートが使用できるようです! ``` class UserMailer < Devise::Mailer # 以下の記述では動作しない # default template_path: 'users/mailer'

元記事を表示

【デプロイ】Dockerで開発環境構築したRailsアプリをHerokuで本番公開する(M1Mac)

# 1. 事前準備
前提:DockerでRailsの環境構築を行っておく(目安:15分)

https://qiita.com/rexid/items/4ea724cef462560039da


**Gitの初期設定を行う**
※下記コマンドすべて実行
“`terminal
$ cd Documents/rails_docker
$ git config –global user.name “GitHubに登録したユーザネーム”
$ git config –global user.email “GitHubに登録したメールアドレス”
$ git config –global merge.ff false
$ git config –global pull.rebase merges
“`
– `git config –global merge.ff false`・・・mergeの際にファストフォワードが起こらないようにする設定
– `git config –global pull.rebase merges`・・・pullの時に常にrebaseする設定

元記事を表示

【Rails】コントローラの異なるページ上で投稿/削除するしくみをつくる

# 目標物の確認
今回の目標物は以下のようです。
![Qiita用.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/b50ddb43-49ac-d72b-7ce6-63204a15a128.jpeg)
ユーザーAのポストに対し、ユーザーBがコメントを投稿します。
コメントの投稿フォームはposts/show内にあります。
コメントはposts/show内で表示され、自分のコメントに対しては削除することが可能です。

# 分からなかったこと
ポスト表示ページのパスが`posts/:id`であり、ページが持つ固有の`params`要素は`id`のみであるならば、、、

+ コメントを作成する際はCommentモデルの`post_id`カラムに`params[:id]`を代入すれば良いのは分かる。
+ コメントを削除する時、該当するコメントの`id`を`find_by`を使って探すことができない。
(`params`が持つ`id`はPostモデルの`id`であり、Commentモデルの`id`で

元記事を表示

OTHERカテゴリの最新記事