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

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

rails s時の「Address already in use」の解決方法

rails s でローカルホスト3000を立ち上げようとした時に、「Address already in use」というエラーが出て起動ができない問題が派生しました。
その際に実施した解決法について備忘録としてまとめます。

以下エラー文です

“`ruby:qiita.rb
Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)
“`
翻訳すると、ローカルホスト3000は既に立ち上がっている。という意味なので、ターミナルを全て終了させたのですが、改善しませんでした。

エラーの原因としては、アプリの動作中にctrl cで強制終了させた事のようです。
その際に行った対処法は
①lsof -i:3000コマンドで、ローカルホスト3000を使用しているアプリを見る
②kill -9 PID番号で該当するPID番号のプロセスを終了させる
という手順です。
順番に説明します。

#「lsof -i:3000」 コマンド

まずはlsof -i:3000 コマンドを実行してローカルホス

元記事を表示

【Rails × Vue】本番環境で画像が読み込めないエラー対応

AWSにデプロイしたRailsとVueで作成したポートフォリオにおいて画像が表示されないエラーが発生し、解決したのでその方法です。

#修正前のディレクトリツリー

“`
original_app
|
|–app
| |
| |–assets
| |
| |–images
| |
| |–img1.svg
|
|–src
|
|–pages
|
|–Home.vue #このコンポーネントでimg1.svgを読み込みたい
“`

“`Home.vue

“`

開発環境だとing1.svgを読み込めたが本番環境だとうまくいかなかった。

#原因
通常のrailsアプリであればviewファイルに/assets/画像ファイルと書けばassets以下のimagesフォルダからファイルを探してきてくれるがVueのファイルはjavascriptなのでそのような動作をしてくれなく

元記事を表示

rails generateコマンドまとめ

rails generateコマンド

モデルの作成

コマンド

“`
rails generate model 名前 [カラム名:型[:index]..] [オプション]
“`

結果

“`
invoke active_record
create db/migrate/20211230082754_create_<名前>s.rb
create app/models/<名前>.rb
invoke test_unit
create test/models/<名前>_test.rb
create test/fixtures/<名前>s.yml
“`

参考

Railsドキュメント

コントローラーの作成

コマンド

“`
rails generate controller 名前 [アクショ

元記事を表示

Ruby on Railsのcloud9環境の設定手順

Rails Tutorialより

Rubyドキュメントをスキップする設定を.gemrcファイルに追加するコマンド

“`
echo “gem: –no-document” >> ~/.gemrc
“`

Rails gemのインストール(今回は6.1.4を使用)

Railsバージョンアップ情報

“`
gem install rails -v バージョン番号
“`

bundler gemのインストール(今回は2.2.17を使用)

“`
gem install bundler -v バージョン番号
“`

Yarnのインストール、セットアップ

“`
source <(curl -sL https://cdn.learnenough.com/resize) source <(curl -sL https://cdn.learnenough.com/yar

元記事を表示

Heroku(PostgreSQL)のDBリセット方法

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Heroku(PostgreSQL)で間違えたレコードを登録した時など、DBを一旦リセットする方法の共有です。
(学習中のため、自分へのメモ的な意味もあります?)

# 結論
下記コマンドの実行で可能です。

“`
heroku pg:reset DATABASE
“`

その後、

“`
heroku run rails db:migrate
“`

にて再びマイグレートできます。

# おわりに
お読みいただきありがとうございました。
自分と同じく初学者の参考になれば嬉しいです。
一緒に頑張っていきましょう〜?

元記事を表示

RailsでGraphQLサーバー構築体験??

一応 `RailsでWeb APIを作成する方法とメリット??` の記事の続きですが前回の記事を読んでいなくても構築可能です。

https://qiita.com/digitter/items/53f83ce50036b2773d55

RailsでGraphQLサーバーを立ち上げて基本的なQuery、Nutation機能を実装してみました!

# 前提

– GraphQLをある程度知っていないとコードの理解は困難です。m(_ _)m

– GraphQLが何なのかは説明しません。ある程度、GraphQLがどういうものかを知っている前提で進めます。

>ぜひ[公式サイト](https://graphql.org/)などで仕様をご参照ください。

– HTTP リクエストメソッドについては説明しません。

>MDNをぜひ (https://developer.mozilla.org/ja/docs/Web/HTTP/Methods)

– HTTPリクエストボディの説明はしていません。

>[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa

元記事を表示

【Rails】モデルにインスタンスメソッドを定義する方法

##モデルにメソッドを定義する理由
モデルに書くのはvalidatesやbelongs_to,has_manyなどだけでなく、メソッドも定義できる。

もちろんモデルを使わなくても小さいサービスであればコントローラーでも全然問題ないが、
理由として少し大きなサービスになってくると、すぐにコントローラーのコード量が増えてしまうからである。(ファットコントローラー)

その時は理解できても、数ヶ月後にコードを見返すと何のコードなのかわからなくなってしまう可能性がある。

##例を交えて解説

“`user_controller.rb

def index
@user = User.find(1)
@my_age = @user.too_young ⬅️
end
“`
このtoo_youngがインスタンスメソッドというもので、モデルで書いたメソッドを
コントローラーで呼び出している。

“`user.rb

class User < ApplicationRecord validates :username, presence: true validates :emai

元記事を表示

【Rails】セレクトボックスを作る方法と注意点【select・collection_select】

Railsのセレクトボックスって、
引数の順番とか指定できる項目の種類が
ごちゃごちゃしてて、なんとなーくの理解だったので、
色々調べてみました!

なお、間違いやもっと良い方法がある…等ありましたら、
お気軽にコメントください。お願いいたします!

# 作成方法①:select メソッド

select メソッドを使ったセレクトボックスの構文は下記です。

“`
select(オブジェクト名, オプションタグの要素(配列 or ハッシュ), オプション, HTMLオプション)
“`

まず、コントローラーでselect に渡す要素を準備する必要があります。どのような方法でも良いですが、例として下記のような取得方法があるでしょう。

“`app/controllers/user_controller.rb
@users = User.pluck(:name, :id)
# => [[“A太郎”, 1], [“B太郎”, 2], [“C太郎”, 3]]

@users = User.all.map { |user| [ user.name, user.id ] }
# => [

元記事を表示

【Rails】ルーティングのネストについて

##ルーティングのネストとは
ルーティングのネストとは、あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述すること。

例えばTwitterの場合、ツイートに対してコメントできる機能があるその場合、このアプリケーションのルーティング(routes.rb)の記述は以下のようになる。

“`
Rails.application.routes.draw do
resources :tweets do
resources :comments, only: [:create]
end
end
“`

tweetsコントローラへのルーティングの記述の中に、commentsコントローラへの記述が書かれている。こうすることによって、どのツイートに紐づいたコメントなのかをURLで判別できるようにしている。

##メリット
**①URLの階層構造ができる**
先程のTwitterのルーティング記述により生成されるURLは、「/tweets/id/comments」になる。

もっと具体的に言うと、とあるツイートにコメントすると「/tweets/2/co

元記事を表示

Validation failed: # must exist 解決法 

##はじめに
Railsでポートフォリオを開発中に、rails consoleで投稿機能がしっかりデータベースに入っているかを確認した。
しかし、model.saveで実行した結果・・・
=>false
という結果が出た。

データベースに保存できていない。

##試したこと

model.save!
上記の様に!をつけてエラーがどこにあるのかを確認できる。

そうすると・・・
ActiveRecord::RecordInvalid (Validation failed: モデル must exist)

というエラーが出てきた。

“`java:モデル.rb
class モデル < ApplicationRecord belongs_to :user, optional: true end ``` optional: true をつけるだけで問題が解決した。

元記事を表示

【 rails db:migrate実行時のエラー 】

##カラムを新しく追加し、rails db:migrateを実行したが、エラー発生
deviseを導入し、ユーザー管理機能を実装していました。
`login_id`カラムを追加しようと思い、マイグレーションファイルにカラムを追記し、
`rails db:migrate`を実行したところ、
`Mysql2::Error: Table ‘users’ already exists`と表示される。
(usersテーブルは既に存在していますよ〜)

##なぜ?
原因はよく分からないまま、エラーをもとに検索。
##結果
`rails db:dorp`で一度データベースを削除し、
`rails db:create`で再生成。

その後`rails db:migrate`を実行すると、エラーも無く、
`login_id`カラムも追加されていました。

##反省
configディレクトリ内のdatabase.ymlファイルに記してある、
`utf-8mb4`を`utf-8`に変更していなかった事が原因と考えられます。
この二つではデータの保存形式が異なるそうです。

元記事を表示

oc debug コマンドで ROSA Node に遠隔ログインしてみた

# はじめに

今回は短い Tips ブログです。AWS で ROSA(Red Hat OpenShift Service on AWS) を動かしているときに、SSH でアクセスしたい気持ちになります。SSH 自体は出来ないのですが、`oc debug` や `kubectl debug` コマンドで該当の Node へリモートアクセスすることが出来ます。今回は、その手順を紹介します。

oc コマンドは、kubectl コマンドと同じ機能を提供しており、さらに OpenShift リソースを扱えるようにしているコマンドです。次の URL に2つのコマンドの相違点が説明されています。
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/3.11/html/cli_reference/cli-reference-differences-oc-kubectl

今回のリモートアクセスについては、どちらでもいいのですが、OpenShift になれるために oc コマンドでやっていきます。

元記事を表示

Rails 7.0で”DEPRECATION WARNING: image/jpg is not a valid content type”のようなエラーが出た場合

## 発生した問題
Rails 7.0にバージョンアップしてテストを実行したら以下のようなエラーメッセージが出ました。

“`
DEPRECATION WARNING: image/jpg is not a valid content type, it should not be used when creating a blob, and support for it will be removed in Rails 7.1. If you want to keep supporting this content type past Rails 7.1, add it to `config.active_storage.variable_content_types`. Dismiss this warning by setting `config.active_storage.silence_invalid_content_types_warning = true`. (called from public_send at /Users/jnito/.rbenv/versions/

元記事を表示

Rails7のlink_toでmethod: :deleteする

Rails7で

“`erb
<%= link_to t("sign_out"), sign_out_path, method: :delete %>
“`
しようとしたら動きませんでした。

代わりに

“`erb
<%= link_to t("sign_out"), sign_out_path, data: { turbo_method: :delete } %>
“`

を使えば良いようです。

元記事を表示

[Rails]オブジェクト指向とは 3行で要約

#オブジェクト指向を簡単に言うと
“`
同じようなプログラムを1か所にまとめてコードを再利用しやすくする仕組み
他のプログラムからできるだけ変更できない仕組み
継承したコードの一部を変更して利用するための仕組み
“`

下記URLに詳しく書かれています。
[オブジェクト指向とは](https://robo-done.com/blog/2021/04/doneship_object_oriented/)

元記事を表示

ブラウザを終了してもsessionを維持する方法

## ユースケース
Deviseでtimeoutableのモジュールを導入しつつ、ブラウザを終了してもセッションを維持したいユーザ
## 方法
### 1 セッションのタイムアウト時間を設定する
“`config/initializers/devise.rb
# コメントアウトを解除し、何分でタイムアウトになるのかを設定する
config.timeout_in = 30.minutes
“`
### 2 Deviseを設定しているモデルを修正
“`app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :trackable, :recoverable, :timeoutable # <= 追加 end ``` ### 3 session_keyを特定 ``` $ Rails.application.config.session_options[:key] => “_qiita_session”
“`

### 4

元記事を表示

【RailsAPI】AbstractController::DoubleRenderErrorの対処法

症状

RailsAPIモードで、条件でrenderするものを変えるアクションを作成時に、以下のエラーが発生しました。
翻訳すると、「このアクションでは、レンダリングおよび/またはリダイレクトが複数回呼び出されました。ご注意ください」

“`terminal:error
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you
may only call render OR redirect, and at most once per action.
Also note that neither redirect nor render terminate execution
of the action, so if you want to exit an action after redirecting, you need to do something like “re

元記事を表示

「heroku run rails db:migrate」コマンドとは・・・

##環境
– Ruby 2.6.5
– Rails 6.1.4.1

##調査の背景・目的
Herokuのデプロイ時のエラー文「We’re sorry, but something went wrong.」が出た際の対処法で、「heroku run rails db:migrate」コマンドを入力すると解消された。コマンドの詳細について記載する。

##そもそもmigrationとは・・・
– データベースの構造(テーブル、カラム)を変更するときに利用する機能

##migrationファイルとは・・・
– データベースを生成する際の設計図

##「rails db:migrate」コマンドで何をする?
– migrationファイルの内容をデータベースに反映する

##「heroku run rails db:migrate」コマンドで何をする?
– migrationファイルの内容を**herokuサーバのデータベース**に反映する

以上

元記事を表示

【Rails】定数の定義方法【上書きトラブル注意】freeze

皆さんは、定数ってよく使いますか?

「Rails」も別の言語と同様で、
どこか専用の場所に定義して使うんだろうなー…ってフワッとした認識だったのですが、調べてみると色々注意点が出てきました。

Railsの定数っていうのは「定数=定まった変数」と言いながら、
実はプログラム内で値を書き換えることが可能なのですね。

チーム開発においては、その辺特にバグの原因にもなり得る箇所かなーなんて思うので、
ぜひ皆さんの今後の開発トラブル回避に繋がるなら幸いだなーと思います!

注意点の前に、
まず、Railsの定数の定義方法について3つ共有します!

# 定数を定義する方法①【カンタン】

一番カンタンな方法がこちら。
「config/initializers/constants.rb」ファイルに定数を定義する方法です。これが、アプリケーションのどこからでも定数を呼び出せる一番カンタンな方法でした。

“`config/initializers/constants.rb
module Hoge
FUGA = [“これは定数です”]
end

p Hoge::FUGA
# => “これ

元記事を表示

【未経験開発 Rails/React(TypeScript)/AWS/Docker/CircleCI】モダンな技術でポートフォリオを作成する方法

# 0. はじめに
モダンな自社開発企業でよく用いられている技術(Rails, React(TypeScript), AWS, Docker, CircleCI)を使用してポートフォリオを作成しました。
本記事のターゲットやコンテンツは以下のとおりです。

## ターゲット: 誰に対する記事か
– 未経験でエンジニア転職するために、プログラミング学習をしている方。
– 未経験でエンジニア転職するために、ポートフォリオを作成しようとしている方。

## コンテンツ: 何がわかるか
– 最終的にどの程度学習すればいいのかの全体感。
– Rails, React(TypeScript), AWS, Docker, CircleCIを使ったポートフォリオの作成方法の概要。

# 1. 概要
## 1.1 サービス概要
人と人との繋がりのあるべき姿を実現する、半匿名型SNSです。
Twitterと似ていますが、以下の2点で異なります。
1. フォロワーの投稿が匿名化されるため、誰によって投稿されたかわからない。
2. 週に1度、投稿を1つだけ匿名化解除できる。
これらの機能により、自由な発信と、

元記事を表示

OTHERカテゴリの最新記事