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

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

【Rails/MySQL】dotenv-railsを使ってデータベースの認証情報を環境変数で管理する

RailsにMySQLを導入する際に、パスワードをdatabase.ymlに直接書くのはいかがなものかと思い、他の方法を調べた結果、dotenv-railsを使って認証情報を環境変数で管理できることがわかりました。

今回は作成済みのRailsアプリケーションにdotenv-railsを導入する手順を紹介します。

## 環境
macOS Monterey:12.3.1
Ruby:3.1.0
Ruby on Rails:6.1.5
dotenv-rails:2.7.6
MySQL:8.0.28

## dotenv-railsとは
– 認証情報などを環境変数で管理するためのgem
– 起動時にプロジェクトのルートディレクトリにある.envファイルを読み込み、ENVに設定する
– [dotenv-rails公式レポジトリ](https://github.com/bkeepers/dotenv)

## 手順

以下の手順で進めていきます。
1. dotenv-railsのインストール
1. database.ymlファイルの修正
1. .envファイルの作成
1. .gitignoreフ

元記事を表示

Ruby on Railsをgit cloneする

この記事は学習した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。
## git cloneとは
そもそも[git clone]とは?
#### 『Gitに存在するリモートのリポジトリをローカルの環境にコピーする』
学習し初めの頃はなかなか[git clone]をすることがなかったですがAWSで自分のアカウントを作成して環境の構築する際に始めて出てきました。
## git cloneの流れ①〜⑥
##### ① GIt hubを開きローカルにコピーしたいリポジトリを選択しリポジトリの画面へ
##### ② 緑色の[Code]のボタンを押し「git@github.com:[ユーザー名]/[リポジトリ名].git」のSHH keyをコピーする。
##### ③ ローカルの環境を開き以下のコマンドを入力
“`
ec2-user:~/environment $ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
“`
##### ④ 以下のコマンドでローカ

元記事を表示

【Rails】モデル名.human_attribute_name(:カラム名) 使い方

# はじめに
Railsの参考書を読んでいた時に、human_attribute_nameについて、
理解していなかった為、簡単にまとめます。

# モデル名.human_attribute_name(:カラム名)とは?
ActiveRecord::Base のクラスメソッドで内部的にI18nモジュールを利用してくれるというものです。
まず、config/locales/ja.ymlに参照元を書いていきます。

# config/locales/ja.ymlに定義
“`config/locales/ja.yml
ja:
activerecord:
errors:
messages:
record_invalid: ‘バリデーションに失敗しました: %{errors}’
restrict_dependent_destroy:
has_one: “%{record}が存在しているので削除できません”
has_many: “%{record}が存在しているので削除できません”
model

元記事を表示

RailsにFactoryBotを入れるときはfactory_bot_railsを使おう

# 概要

– RailsにFactoryBotを入れる場合、本来は`gem factory_bot_rails`を使うべきですが、`gem factory_bot`を使ってしまったことで発生したエラーに誤った対処をしてしまった話を共有します
– もし私と同じようなルートを辿る方がいらしたら、この記事が役に立つといいなと思って書きました

# やりたかったこと

– RailsアプリでFactoryBotを利用したい

# やったこと

– Gemfileに`gem ‘factoy_bot’`を追加する 👈**ここが間違い**
– ファクトリを作成する
– テストファイル(またはスペックファイル)を書く
– この時に私が使ったのはMinitestでしたが、RSpecでも同様の事象が発生することを確認しました
– テスト(またはスペック)を実行する

# 発生したエラー

“`
KeyError: Factory not registered: “(ファクトリで定義した名前)”
“`

# 誤った対処

– テストでファクトリを呼び出す前に`FactoryBot.re

元記事を表示

【誰でも簡単】RailsアプリをRender.comでデプロイする手順まとめ

# はじめに
こんにちは

普段herokuを使うことが多いのですが、この前のGithubアクセストークン流出問題もあり、herokuに代わるサービスとして気になっていたRender.comを触ってみたので、簡単な手順やポイントなどを書き留めておこうと思います📝

Render.comを使ってみたい人の一助になれば嬉しいです

↓トークン流出問題の記事

https://gigazine.net/news/20220418-github-heroku-travis-ci-npm-oauth/

(ターゲットは初心者〜中級者向けを意識しています)

# 取り上げる内容(取り上げない内容)

本記事で説明するのは以下についてです。
* Render.comでのRailsアプリのデプロイ方法
* 上記にあたり少し注意する点など(初見では気づきにくい部分)

以下については説明しません(後ほど別記事などで追加するかもしれません)
* Railsアプリの作り方
* Rails以外のアプリでのデプロイ方法
* Dockerを使ったデプロイ方法
* redisの設定
* cronの設定

元記事を表示

Rails API + React による開発ではまった点

# 初めに
rails APIとReactを用いた開発ではまった点に関するメモです。rails APIをHeroku、Reactをfirebaseにデプロイしたのですが、開発段階では起きなかったエラーも発生したのでそれらについてもまとめています。あくまでエラーに関する記事なのでユーザー認証やメール送信の実装などには深く触れません。

プロジェクトの構成は以下のようになっています。
“`
プロジェクトフォルダ
├ backend
└ frontend
“`

rails 側はAPIモードを指定してrails new、React側はcreate-react-appで作成しました。
“`:backend
# こちらでも問題ありませんが、
rails new . –api

# 以下のようにDBをpostgresqlに指定したほうがHerokuにデプロイする際にごちゃごちゃせずに済みます。
rails new . –api -d postgresql
“`

“`:frontend
npx create-react-app .
“`

# 1. CORS(Cross

元記事を表示

Ruby初心者がGitHub上でよくやりがちな誤爆メンションとその解決策

## はじめに:誤爆メンションって何?
Rubyでは`@`で始まる変数がインスタンス変数になります。
これはRuby on Railsなどでも当然同じルールです。

“`ruby
# @で始まる変数はインスタンス変数
@foo = 1

# 何も付かない変数はローカル変数
foo = 1
“`

一方、TwitterやGitHub、そしてこのQiitaなど、昨今のSNSでは`@`がユーザーへのメンションとしても使われています。
たとえば、以下の画像に見える`@jnchito`は、jnchitoというTwitterユーザーに対するメンションです。

![Screen Shot 2022-05-04 at 15.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/bff65b1b-67bb-c4f4-4427-2e349e2b1428.png)

この2点はわざわざ僕が説明しなくても「そんなこたぁ前からわかっとるわい!」と思われそうな話なのですが、TwitterやGitHubで何も考え

元記事を表示

ユーザーごとの学習時間の合計

# はじめに
この記事は筆者がスタディープラスのトレースをする際に、ユーザーの学習時間のランキングを表示するために書いたコードの備忘録になります。
# 実装
deviseの導入と基本となる投稿機能(記事内ではtweets)が完成している前提で進めます。

“`ruby:users_controller
#以下を追記
def index
user = User.all
@arr = []
user.each do |t|
t.sum_time = t.tweets.sum(:time)
@arr.push(t)
end
end
“`
pushメソッドは配列(@arr)の末尾に要素を一つ追加してくれるメソッドです

“`ruby:app/views/users/index.html.erb

Users#index

<% @arr.each do |u| %>
<%= u.email %>
<%= u.sum_time %>

元記事を表示

【Rails】Deviseのサインアップページが編集できない、反映されない

# 起きている問題

“`app/views/users/registrations/new.html.erb“`などを編集してるにも関わらず、変更が反映されない。
エラーも表示されない

# 解決方法
`config/initializers/devise.rb`の
“`
# config.scoped_views = false
“`

“`
config.scoped_views = true
“`
に変更、#も取る

見つからない場合はctrl(もしくはcommand) + Fでファイル検索できる。

変更後サーバーを再起動させる

以上

元記事を表示

Rails+ReactのDocker環境(TechpitさんのUberEats風SPAアプリ)

# 概要
Railsチュートリアルを完走し終えまして、
次何しようかなと考えていたところに「完走者向け発展教材(Techpit)」を見つけたので、教材に挑戦しています。

「RailsとReactでUberEats風SPAアプリケーションをつくってみよう!」
https://www.techpit.jp/courses/138

ただ、PC上に展開したくなくてDocker上で動作するようにしました。

# ソースコード
Dockerfile
“`Dockerfile
FROM ruby:2.7.2
RUN apt-get update -qq && apt-get install -y build-essential nodejs postgresql-client libpq-dev

RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – &&

元記事を表示

Rails + ransackでセレクトボックスからscopeを選択して検索条件にする方法

## はじめに

ransackでよくある`name_cont`や`articles_title_start`のような条件では表現できず、scopeを使わないと検索できないケースで、なおかつセレクトボックスから任意の検索条件を選択できるようにする検索フォームを作ってみました。

## アプリの仕様

テスト管理アプリケーションです。生徒を表すStudentモデルと、試験の結果を格納するExamモデルがあります。

“`ruby
class Student < ApplicationRecord has_many :exams, dependent: :destroy end ``` ```ruby class Exam < ApplicationRecord belongs_to :student end ``` DBには以下のようにデータが格納されているとします。 **studentsテーブル** | id | name | |----|-------| | 1 | Alice | | 2 | Bob | | 3 | Carol | **exam

元記事を表示

heroku本番環境でerror Command “webpack” not found.やActionView::Template::Error(Webpacker can’t find)を解決

※これはメモ的なものなのでクオリティは担保できませんのであらかじめご理解いただきたく存じます。
https://teratail.com/questions/eelxqk0ads5nv3
テラテイルのほうでも質問をしていて、自力で解決できたのでどうやって解決できたかを自分なりにまとめてみました。
dockerのnodeのバージョンを確認したほうが良い。とのアドバイスは@NaokiM03さんにしていただき、バグの発生環境の切り分けに大いに役立たせていただきました。本当にありがとうございました。

# 前提

docker開発環境でRailsとVueを用いた簡易的なアプリを
herokuにコンテナデプロイしています。

を参考にコンテナデプロイをしてみました。

https://devcenter.heroku.com/ja/articles/build-docker-images-heroku-yml

自分の場合はさらに、

アプリケーションのルートディレクトリに heroku.yml​ ファイル

元記事を表示

【Rails】Aws::S3::Errors::RequestTimeTooSkewed への対処

## S3へのリクエストタイムが違いシードが流せない
Railsの本番環境でシードデータを入れる時に、
S3とのtimeがかけ離れているというニュアンスのメッセージが出現した。

“`
[sirius@ip-10-0-11-191 diary_app]$ rails db:seed RAILS_ENV=production
Start inserting first seed “user” …
rails aborted!
Aws::S3::Errors::RequestTimeTooSkewed: The difference between the request time and the current time is too large.
“`
EC2インスタンス上では`JST`(日本標準時)を指定しているので、`date`でそれ確かめてみると、たしかに、実際の時間が10:00なのにインスタンス40分近くずれていることがわかった。

これがシードデータを流すときに、S3バケットにアクセスした際に時間差がおおきすぎるのでエラーが生じたのだろう。

“`
[sirius@

元記事を表示

脳筋が岡山県内のジムを検索するサービスを開発しました(ポートフォリオ、Rails+AWS+Docker)

## はじめに

・この記事はポートフォリオとして開発した、岡山県内のジム検索サービス「Gymseek」の紹介記事です。
・現在はAWSの無料会員期間終了のため、サービスを閲覧することはできません。

![150344970-bab35ab6-8556-427d-9775-44233e3da39a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2086069/fa16a097-41d8-0809-9cb8-89c922161283.png)

https://github.com/omeinu/gymseek

## 目次
– 自己紹介
– 利用方法
– 使用技術
– AWS構成図
– 機能一覧
– ER図

## 自己紹介

初めまして!
私は、元消防士の駆け出しエンジニアです。
29歳で岡山→東京へ上京しました。

エンジニアとして働き始めて1ヶ月が経ちましたので、ここらで転職用に開発したポートフォリオを記録に残しておこうと思い、初めて記事を書かせていただきました。

## 利用方法

トップページ

元記事を表示

Rails7でdevise_token_authをインストールする

## 遭遇したエラー

“`
$ bundle

Fetchings gem metadata from https://rubygems.org/………..
Resolving dependencies….
Bundler could not finde compatible versions from gem “rails”:
In Gemfile:
rails (~> 7.0.1)

devise_token_auth was resolved to 0.1.21.alpha2, which depends on
rails (~> 4.1.4)
“`

rubygemsに上がっているdevise_token_authがRails7をサポートしていないためインストールができない
## 解消法

Gemfileに以下のように`devise_token_auth`を追加する
“`yaml
gem ‘devise_token_auth’, ‘>= 1.2.0’, git: “https://github.com/ly

元記事を表示

Rspec導入で躓いた話

# 概要

既存のRailsプロジェクトにRspecを導入したらつまづいたので解決方法を共有します
1人でも多くの人の役にたてればと思います。

# はじめに

### 使用する環境
– MacOS(M1)
– Rails 6.1.5
– Ruby 3.1.0
– yarn 1.22.17
– Homebrew 3.4.8

### はじめにアプリケーションを作成するディレクトリを作成

“`shell
$ mkdir rails_Rspec_app
$ cd rails_Rspec_app
“`

### railsプロジェクトの作成
“`shell
$ rails new rails_Rspec_app
“`

### プロジェクトへ移動
“`shell
$ cd rails_Rspec_app
“`
### サーバー起動

“`shell
$ rails s
“`
http://localhost:3000 にアクセスしてこの画面が出たら成功です

![スクリーンショット 2022-04-29 16.18.29.png](https://qiita-image-s

元記事を表示

Railsのバージョンを変える方法

# 現状
“`terminal:ターミナル
gem install rails
“`
このコードを実行すると、デフォルトで最新版のRailsがダウンロードされますが、、、
“`terminal:ターミナル
gem install -v 6.1.4.4 rails
“`
このように、**バージョン指定して実行**しても、なぜか最新版のRails(7.0以上)がダウンロードされることがしばしば起こっています。。。(多くは、初心者のバージョン指定忘れですが、稀に起こっています🤔)
今回は、その解決策を書いておきます!!🙌

# 解決策
## 手順
1. railsをアンインストールする
1. railtiesをアンインストールする
1. 再度railsのバージョンを指定してインストールする

## 実際の手順
### 1. railsのアンインストール
以下のコマンドを実行し、アンインストールします。
“`terminal:ターミナル
gem uninstall rails
“`
### 2. railtiesのアンインストール
次に、以下のコマンドを実行します。
“`term

元記事を表示

🔰【初学者用】deviseを使ってユーザー管理機能を実装しよう!【Ruby on Rails】

## はじめに
プログラミング初学者の私がアウトプットとこれから学習される皆様の参考になればと思い投稿しています。
まだ、マークダウン記法も不慣れな初学者ですので、間違い等があれば指摘いただけると幸いです。

## この記事を見てできるようになること
Ruby on Railsのgemであるdeviseを使用して、ユーザー管理機能を実装できるようになります!

## deviseとは?
ユーザー管理機能(例:ログイン、ログアウト、新規登録)を簡単に実装するためのGemです。

## deviseの導入
まずGemfileを編集します。追記する場所はGemfileの最後の行で構いません。
“`:Gemfile
gem ‘devise’
“`
:::note warn
**⚠注意**
**device**としないこと!
私はこれでかなりの時間を消費しました\:cry:
:::

使用するアプリディレクトリを開き以下のコマンドでgemをインストールします。

“`:ターミナル
bundle install
“`
次にローカルサーバーを起動or再起動させます。
サーバーを起動していなか

元記事を表示

【PostgreSQL】A server is already running の対応

## エラー内容

Railsアプリを実行している中でpostgresqlへの書き込みが永遠に終わらない状況に直面した。

Contorl + C でシャットダウンしようとしても効かず、仕方なくターミナルを強制終了。その後にアプリを立ち上げようとすると以下のメッセージが表示された。

“`
ynamiki@YoheinoMacBook-Pro sora % rails s
=> Booting Puma
=> Rails x.x.x.x application starting in development
=> Run `rails server –help` for more startup options
A server is already running. Check /Users/ynamiki/Desktop/sora/tmp/pids/server.pid.
Exiting
“`
※soraはprojectフォルダ

起動しようとしているPostgreSQLが既に走っていると認識されており、それとぶつかって起動できないらしい。QiitaにはPumaサーバーが

元記事を表示

Gemネイティブ拡張機能のビルドに失敗

## スペック
– macOS Monterey 12.3.1
– Rails 7.0.2.3
– Bundler version 2.3.7

## 実行したコマンド
`bundle install` のコマンドを実行したら下記のエラー内容が返ってきました。

## エラー内容
“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:

~~~ 省略 ~~~

rake aborted!
Could not find MIME type database in the following locations: [“/usr/local/share/mime/packages/freedesktop.org.xml”,
“/opt/homebrew/share/mime/packages/freedesktop.org.xml”, “/opt/local/share/mime/packages/freedesktop.org.xml”,
“/usr/s

元記事を表示

OTHERカテゴリの最新記事