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

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

コミット→プッシュ→マージ

# コミットまで

1.現在のブランチを確認
“`git
$ git branch
“`

2.ブランチを切ってそのブランチに移動
“`git
$ git checkout -b (作成するブランチ名)
“`

3.作業を行う

4.修正したファイルの確認
“`git
$ git status
“`

5.ソースコードを確認
“`git
$ git diff
“`

6.全てステージングに追加する
“`git
$ git add -A
“`

7.コミットを行う
“`git
$ git commit -m “コミットメッセージ”
“`

8.コミットログを確認
“`
$ git log
“`

# プッシュをおこなう

1.githubへプッシュ
“`git
$ git push origin 現在のブランチ名
“`

# マージを行う

1.masterブランチに移動
“`
$ git checkout master
“`

2.masterブランチへマージ
“`
$ git merge マージしたいブランチ名
“`

3.リモートブランチの

元記事を表示

Github ActionsでECSに自動デプロイできているのに想定通りの挙動にならなかったエラーをご紹介

# 本記事について
本記事は、先日Github ActionsにてECSへCI/CDパイプラインを構築した際に自身がハマってしまった2つのエラーについて備忘録も込めて記載します。
GitHub Actionsではエラーにならずに通ったものの、サイトを確認してみると想定通りの挙動になっていなかった部分となります。
※初学者のため、間違い等ございましたらご指摘いただけますと幸いです。

# 環境
– MacOS: Ventura13.0.1
– Ruby:3.12
– Rails:7.0.4

# ①Railsの環境変数Master.keyの不足によるエラー
ポートフォリオの作成中、まずCircleCIでパイプラインを構築したのちに、Github Actionsに移行したので、そこまで大きいエラーはないと思っていましたが、エラーに遭いました。

## 起きた事象
Github ActionsではエラーにならずECRへpush後、ECSへデプロイできていましたが、サイトを開くとfrontendとbackendの通信がうまくいっていなかったです。
“`java:cloudwatch log

元記事を表示

Railsのcolumn名の変更

Railsのカラム名を間違ってmigrateしてしまったので修正方法を書いておきます。
自分の理解度を高めるためのアウトプットです。

//誤りの記述
rails g model User nam:string age:integer
カラム名をnameにしたかったがnamにしていた。

db:migrateの前に修正すればよかったが、気づかずmigrateしてしまった。

なので以下の処理を実施
1.migrationファイルを作成
$ rails generate migration rename_[変更前のカラム名]_column_to_[モデル名(複数形)]

2.migrationファイルを編集
生成されたファイルにchangeメソッドを追加し、そこに変更したいカラム名を記述する。
rename_column :テーブル名, :変更前のカラム名, :変更後のカラム名

class RenameNamColumnToUsers < ActiveRecord::Migration[7.0] def change rename_column :users, :nam,

元記事を表示

gemとbundlerについて

# はじめに
gemとbundlerについて、
ちゃんと理解できていなかったので、備忘録としてまとめる。

## gemとは
gem形式にパッケージングされたRuby用の外部ライブラリのこと。

gem形式とは
外部ライブラリのフォルダやファイルをgem形式(.gem)という1つのファイルに(パッケージング)まとめたもののこと。
参考:
https://pikawaka.com/ruby/how-gem-works#gem(gemパッケージ)とは

ライブラリとは、汎用性の高い機能を他のプログラムで呼び出して使えるように部品化して集めたファイルのこと。
ライブラリには大きく分けて標準ライブラリ、組み込みライブラリ、外部ライブラリの3種類あり、
gemは外部ライブラリにあたる。

備考:
Railsもgemパッケージとして提供されている。
他にも有名なgemとしては、ユーザ認証を簡単に実装できる「devise」、ページネーションを簡単に実装できる「kaminari」がある。

## RubyGemsとは
Rubyのパッケージ(gem)を管理するシステムで、Ruby1.9以降から標準ライ

元記事を表示

【2023年版】Turboを有効化したままRails 7.0でDeviseを使う方法

## はじめに
Rails 7.0がリリースされて1年以上経ちましたが、Railsのメジャーな認証ライブラリであるDeviseは未だにRails 7.0に部分的にしか対応していません([参考](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md#481—2021-12-16))。
そのため、Rails 7.0で`rails new`したRailsアプリケーション(つまり、Turboが有効になっている状態)だと、Deviseを使おうと思っても意図しない挙動になります。

そこで、この記事ではTurboを有効化したままRails 7.0でDeviseを使う方法を紹介します。

## 対象バージョン
この記事は以下のバージョンで動作確認しています(それぞれ2023年1月4日時点での最新バージョンです)。

– Rails 7.0.4
– Devise 4.8.1
– turbo-rails 1.3.2
– Ruby 3.2.0

なお、将来的にDeviseがRails 7.0に対応した場合、この記事の内容はおそらく不要な

元記事を表示

Ruby on RailsのアプリにLINEを組み込む。

## はじめに
– 今回は[【個人開発】日用品を自動で購入してくれるアプリを作りました。](https://qiita.com/prg_mt/items/decb7912e82e6384fafb)で実装したLINEログインとLINEbotについての解説記事になります。

## Lineログイン機能について
### Railsアプリの作成
まずはじめに アプリを作成していない方は`rails new`してアプリを作成してください。

### Deviseの導入
LINEログイン機能を実装する前にまずはDeviseでログイン機能を実装していきます。

“`ruby:Gemfile
gem ‘devise’
“`

Gemfileに記載が完了したら、`bundle install`を実行

次に、ターミナルで以下を実行し、Deviseを使えるようにしていきます。
“`terminal:ターミナル
rails g devise:install
rails g devise User
rails db:migrate
“`

ここまで問題なく実行できれば、`rails s`でサーバを立ち

元記事を表示

Rails 7.0にバージョンアップしたらquery_log_tagsを有効化しよう

# Profit
– verbose_query_logs = true でない環境でrails serverのログが少し追いやすくなる
– ActiveJobを使っている場合はジョブのログも
– スロークエリログの発生箇所が少し特定しやすくなる

# How to
Railsアプリケーションの設定に以下を追加するだけ

“`rb
config.active_record.query_log_tags_enabled = true

# カスタマイズする場合は `query_log_tags=` を使って指定可能
config.active_record.query_log_tags = [ :controller, :action ]
“`

# 前提知識
## Verbose Query Logsについて
Railsアプリケーションを開発していてふとログを見た時に、SQLログのすぐ下にソースコードのどの行で呼ばれたのかが出力されている (下記参照) のが地味に便利だったりする。
“`
Article Load (0.2ms) SELECT “articles”

元記事を表示

ShopifyAPI::Auth::Oauth::AuthQueryでwrong number of arguments (given 1, expected 0)が出る場合(Rails7 + Ruby3.0以上)

Shopifyの公式gemを使っていて発生したエラーに対する対処法。
(Rails7, Ruby3.0以上で多分発生)

filtered_params = request.parameters.symbolize_keys.slice(:code, :shop, :timestamp, :state, :host, :hmac)
keyword_params = Hash.ruby2_keywords_hash(filtered_params)
auth_query = ShopifyAPI::Auth::Oauth::AuthQuery.new(keyword_params)

auth_result = ShopifyAPI::Auth::Oauth.validate_auth_callback(
cookies: cookies.to_h,
auth_query: auth_query
)

キーワード引数の挙動の変更によるものと思います。

元記事を表示

uninitialized constant ◯◯[定数名] (NameError)への対処法

# 概要

PF作成中にdockerでサーバーの起動を試みた際、
uninitialized constant OmniAuth (NameError)というエラーが表示。
つまづいたので記録として残します。

# 対処法

①以下項目を確認
・ファイル名とclass名が一致しているか?
・ファイルpathとmoduleの定義が一致しているか?
・Railsにファイルを読み込ませているか?
(引用元と詳細:https://qiita.com/yoshixj/items/17de45928f52264fd6a0)

②サーバー起動時に問題が発生した場合は、当該定数のGemがインストールされているか確認

以上です。

# ちなみに
私は②でした。
そもそもGemfileにomniauth-twitter(定数OmniAuthを使うためのGem)を記載していませんでした。

ミスは大体単純な所で発生しがち、気をつけます。

元記事を表示

開発をはじめて半年の私がデータの並び替えで使えるなぁと思ったもの

開発業務に携わって半年、
データの並び替えで使えるなぁと思ったものを2つ書き留めておきます。

開発環境
・Ruby
・Rails
・MySQL
・Mac

なお、この記事で「order」とは、「取得したレコードを特定のキーで並び替える」ことを指します。
[参考] https://railsdoc.com/page/model_order

#### 今回使うテーブル
Naoさん、Kenさん、Mikaさんのやることリストテーブルを仮定します。
contentはやることリストの内容、personは人、categoryは項目のカテゴリー、dateは日付を格納する想定です。

“`
+—-+————+——–+————–+————+
| id | content | person | category         | date |
+—-+————+——–+————–+————+
| 1 | 女子会 | Nao | frie

元記事を表示

【Rails】SNS機能で相互フォロー一覧を取得する

フォロー一覧、フォロワー一覧を実装する記事はよく見かけるのですが、相互フォロー一覧を取得する実装は見かけなかったので、今回記事にしました。

## 前提
基本的なフォロー・フォロワー機能がすでに実装してあることが前提となります。
具体的には以下のような実装を前提としています。

## モデル

“`ruby: user.rb
class User < ApplicationRecord has_many :relationships, class_name: 'Relationship', foreign_key: 'follower_id', dependent: :destroy, inverse_of: :follower has_many :reverse_of_relationships, class_name: 'Relationship',

元記事を表示

Turbo Rails Tutorial をやってみた! 0章(Mac、Ruby 3.2.0、Rails 7.0.4)

本記事は、?「Turbo Rails Tutorial」の学習を進めていく際の個人メモです!

https://www.hotrails.dev/turbo-rails

# 0章 [Turbo Rails tutorial introduction](https://www.hotrails.dev/turbo-rails/turbo-rails-tutorial-introduction)

この章では、環境構築をしていきます。ちなみに私は Mac ローカルで進めます。最新の ruby で進めたかったので ruby 3.2.0 をインストールしました。

“`terminal
$ brew update
$ brew upgrade ruby-build
$ rbenv install 3.2.0
“`

インストール時に下記と同じエラーが出ました。

https://github.com/rbenv/ruby-build/discussions/2118

ruby 3.2.0では、`libyaml`や`libffi`を別途インストールする必要があるそうです。

“`te

元記事を表示

バリデーションを始めて扱う

# バリデーション(検証)
Active Recordを使って、モデルがデータベースに“`書き込まれる前にモデルの状態をバリデーション(検証: validation)“`できます。Active Recordにはモデルチェック用のさまざまなメソッドが用意されており、属性が空でないかどうか、属性が一意かどうか、既にデータベースにないかどうか、特定のフォーマットに沿っているかどうか、多岐にわたったバリデーションが行えます。

バリデーションは、“`データベースを永続化するうえで極めて重要“`です。そのため、save、updateメソッドは、バリデーションに失敗するとfalseを返します。このとき実際のデータベース操作は行われません。上のメソッドにはそれぞれ“`破壊的なバージョン (save!、update!) があり、こちらは検証に失敗した場合にさらに厳しい対応“`、つまりActiveRecord::RecordInvalid例外を発生します。以下はバリデーションの簡単な例です。

“`rb
class User < ApplicationRecord validates

元記事を表示

【Rails】エラー Mysql2::Error: Table ‘〇〇_development.〇〇’ doesn’t exist: 

# 概要
アプリ作成時、コントローラ、モデルを一気に作成し、その後
“`$ rails db:migrate“` コマンド実行でタイトルのエラー。
解決方法をまとめます。

# 結果
“`rails db:migrate:status“` でdown状態を確認後、
マイグレーションファイルの日時部分を入れ替え、
“`$ rails db:migrate “`で解決。

![スクリーンショット 2023-01-03 16.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235743/b5c32f8d-ec10-0936-ded1-d90ae7ebb106.png)

青丸の部分を入れ替えます。

# 原因
外部キー、モデル作成($rails g コマンド)の実行順番が原因でした。

以下、画像のcommunity_topic、article、community_topic_tagテーブルで解説します。
![スクリーンショット 2023-01-03 16.42.12.png](ht

元記事を表示

AWS内のDBを dbeaver に表示させる

## 概要

AWS(EC2 ,RDS CLOUD9) + Ruby on Railsでプロジェクト作成した。
AWS内で使用しているDB(Mysql)をWindows(ローカル環境)にインストールした
Dbeaver上でRails プロジェクト(本番環境)のDB(Mysql)を表示させる例を示す

## 前提条件

### 1.開発環境

EC2-インスタンス使用 (Amazon Linux)
-インスタンスid: i-〇〇〇〇〇…
-パブリック IPv4 アドレス:〇〇.〇〇〇.〇〇.〇〇
-Elastic IP: 上記に同じ

統合開発環境 AWS cloud9を使用
DB: sqlite3 (Railsでの標準DB)

### 2.本番環境

EC2-インスタンス使用 (Amazon Linux)
-インスタンスid: i-△△△△…
-EC2ユーザー名: ec2-user(デフォルトのまま :変更可)
-パブリック IPv4 アドレス:△△.△△△.△△.△△
-Elastic IP: 上記に同じ

DB: mysql 使用 (AWS R

元記事を表示

yarn build したときのエラー解決方法(Rails7 アプリで esbuild を使用時)

# エラー内容

以下のようなエラーが出たときの解決方法を記録しておきます。

“`bash
docker-compose run –rm app yarn build

Creating ***_app_run … done
yarn run v1.22.17
$ esbuild app/javascript/*.* –bundle –sourcemap –outdir=app/assets/builds –public-path=app/assets/builds
/myapp/node_modules/esbuild/bin/esbuild:159
throw new Error(`
^

Error:
You installed esbuild for another platform than the one you’re currently using.
This won’t work because esbuild is written with native code and needs to
install a

元記事を表示

ユーザー管理機能(Devise)について

# deviseとは
webアプリケーションにおいて認証機能を実装するためのgemです。

# 導入方法
1\. ターミナルにてcdコマンドを使い、作成しているAppのディレクトリ内に移動する

2\. Gemfile内で追記する
“` .Gemfile
gem ‘devise’
“`

3\.ターミナル内にてGemをインストール
“` .terminal
bundle install
“`
:::note info
gemをインストールした後はローカルサーバーを再起動する
:::

4\.deviseの設定ファイルを作成
“`.terminal
rails g devise:install
“`

# deviseのモデルを作成
1\.モデルの作成
“`.terminal
rails g devise [モデル名]
“`

2\.テーブルに必要なカラムを追加
モデルを作成するとdb/migrateのディレクト内に先程生成したdeviseのモデルテーブルが生成されている。そのファイル内で追加を行う

:::note info
ex)nicknameを文字列型、空なしにす

元記事を表示

git mergeしたらnot something we can mergeが出たので解決してみた

今回はgit mergeを実行しようとした以下のエラーが発生した

“`
merge: sigh-up – not something we can merge
“`

解決策

ブランチ名をコピペしたらいけた。

ブランチを確認して、マージしたいブランチ名をここでコピーします。
“`git
git branch
filling-in-layout
* main
modeling-users
rails-flavored-ruby
sign-up
static-pages
“`

コピーしたマージ名をペーストしてあげると解決できました。
“`
git merge <マージ名> #マージ名を入力するときだけペーストする。
“`

考えられる原因

おそらくタイプミスなのですが、ぱっと見はよくわかりませんでした。なので、この手のエラーが出たらとりあえずブランチ名をコピペしてみるといいかもしれないです。

元記事を表示

redirect_to @userは redirect_to user_url(@user)と同値

以下の二つのコードは同値です。
“`Ruby
redirect_to @user
“`

“`Ruby
redirect_to user_url(@user)
“`

元記事を表示

投稿のコメントにYoutubeのURLを入れ込む方法

今回はユーザーが投稿した投稿にコメントをする際にYoutubeのURLを埋め込む方法を紹介します。

投稿のコントローラー:favorite(普段自分が使っているコントローラー)
コメントのコントローラー:comment

①commentsテーブルにyoutube_urlカラムを追加します。

“`ruby:コマンドプロンプト
rails generate migration AddYoutube_urlToComments youtube_url:string
“`
“`ruby:コマンドプロンプト
rails db:migrate
“`

②commentコントローラーに、コメント内でYoutubeのURLを埋め込むためのコードを書きます。

“`ruby:app/controller/comments_controller.rb
def create
favorite = Favorite.find(params[:favorite_id])
comment = favorite.comments.build(comment_params)

元記事を表示

OTHERカテゴリの最新記事