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

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

【Ruby on Rails】AWSの本番環境で起きたエラーをtailを使って確認する方法

#対象者

* 本番環境(デプロイ後)でエラーが発生している方
* Cloud9を使用して開発を進めている方

#目的

* cloud9から本番環境で起きたエラーの原因を突き止める

#実際の手順と実例
###1.logディレクトリに遷移する

まず、EC2からSSHでログインを実施します。
cloud9のターミナルから下記コマンド実行

““
$ ssh -i ~/.ssh/[pemファイル名] ec2-user@[IPアドレス]
““
[]の中身はそれぞれの状況によって変わると思います。
pemファイル名はキーペアの作成時にできたやつです!(うろ覚え)

その後、下記の順でlogでディレクトリまで移動します。

“`
$ cd アプリケーション名
$ cd log
“`

###2.エラー内容確認

lsコマンドで下記のファイルを見てみます

““
[ec2-user@ip-xxxxxxxx log]$ ls
development.log migrate:reset.log production.log puma-error.log puma.l

元記事を表示

[Rails]予約語一覧[h~m]

# はじめに
本記事では、Railsの予約語一覧を記述しています。
以下の記事の続きになります。

https://qiita.com/mkato1013/items/07194f6a799fa9acedac

# 予約語一覧(注意すべき単語を記述しています)
|頭文字|単語||||
|-|-|-|-|-|
|h|having|hold|host|hour|
||*「hour~」も多いです||||
|i|if|ignore|ilike|import|
||in|index|indexerror|infile||
||initialize|insert|int|int1|
||int2|int3|int4|int8||
||integer|into|io|is|
||isolation||||
|j|join||||
|k|key|keys|kill|||
|l|lag|language|large|last|
||layout|lead|leading|leave|
||left|less|level|like|
||limit|lines|link|ln|
||load|loader

元記事を表示

【Ruby】newした先のclassにinitializeが存在しない場合に考えること

## 背景
Railsのコードを読んでいて`<モジュール名>::<クラス名>.new`といったインスタンスが存在しており、該当するモジュールのファイルにジャンプした後、そのファイルのクラスに`initialize`メソッドが存在しなかったので疑問になり調べてみることにしました。

## 結論
結論としてはクラス内部で`include ActiveModel::Model`が呼ばれており、Ruby本体の`rails/activemodel/lib/active_model/model.rb`の`initialize`が呼ばれていることがわかりました。

“`ruby:rails/activemodel/lib/active_model/model.rb
# Initializes a new model with the given +params+.
#
# class Person
# include ActiveModel::Model
# attr_accessor :name, :age
# end

元記事を表示

【Rails】rails aborted! ActiveRecord::RecordNotFound: Couldn’t find User with ‘id’=0の対処法

症状

Railsでテストデータを作成しようとしたとき、下記エラーが発生してうまくデータが作成できませんでした。
どうやら、データベースにゼロ番目のデータが登録されていないにもかかわらず、ゼロ番目を参照しようとしているため、エラーが出ているようです。

“`terminal:エラー
rails aborted!
ActiveRecord::RecordNotFound: Couldn’t find User with ‘id’=0
“`

以下がseedのソースになります。

“`ruby:seed.rb
3.times do |n|
user = User.new(
first_name: “firstname#{n}”,
last_name,”lastname{n}”,
)
user.save!
end

3.times do |n|
user = User.find(n)

6.times do |m|
home = user.homes.build(
name:”na

元記事を表示

非公開のリソースにURLでアクセスされたらどうする?(例えば非公開記事とか)

# やりたいこと
投稿者が記事を投稿します。
投稿した記事は、公開/非公開(active/inactive)を設定できます。
読者側のページでは、公開記事を一覧で表示して(index)、各記事にアクセスできるようにします(show)。

読者側ページでは非公開記事は表示せず、遷移する動線を提示しないのは当然ですが、これをしただけでは、記事のURLからアクセスされたら非公開記事も見られてしまいます。

どうすれば良いでしょうか?

環境
ruby 2.7.2
Rails 6.1.3.1

投稿データを扱うこんなモデルがあったとします:point_down:
公開/非公開を制御するために、statusというカラムを持たせて、enumで定義します。

“`ruby:post.rb
# == Schema Information
#
# Table name: posts
#
# id :bigint not null, primary key
# title :text not null
#

元記事を表示

ActionText と ActiveStorageを使った時の画像のリサイズ

## 環境
– ruby 2.7.2
– Rails 6.1.4
– ActiveStorage(画像の管理)
– ActionText(リッチテキスト)

## 状況整理
– 記事作成アプリを作成中
– 記事の詳細画面表示時に画像の大きさバラバラ
– Active Strageだけの場合のリサイズは出ていた
– Action Textを介した場合の表示のリサイズに詰まる

## 結論
今回は画像をとりあえず均一にしたかったのでviewファイルに以下の対策を行なった。

“`.html
# active_storage/blobs/_blob.html.erb
<% if blob.representable? %>
– <%= image_tag blob.representation(resize_to_limit: local_assigns[:in_gallery] ? [ 800, 600 ] : [ 1024, 768 ]) %>
+ <%= image_tag blob.variant(resize: "好きなサイズ") %>
<% end %>
`

元記事を表示

MVCモデルについて

#MVCとは
モデル(Model)、ビー(View)、コントローラー(Controller)の頭文字をとって**MVC**という。
Railsでは、MVC+ルーターに役割が別れる。

####なぜ必要なの?
M/V/Cに分割することで、効率的に開発、保守することが可能になる。
MVCについて理解せず場当たり的に開発してしまうと、ディレクトリ構造がぐちゃぐちゃなってしまいがち。その結果、チーム開発や保守がしづらくなってしまう。

#コントローラー
司令塔、MVCの中心的存在。
**コントローラーを中心にMVCを覚えると分かりやすい。**

####役割
ユーザーの入力を元に、モデルとビューに命令を出す
ユーザー、モデル、ビューの橋渡し的存在。

####ファイル
– 場所: `/app/controllers/[コントローラー名]_controller.rb`
– 名前: `[コントローラー名]_controller.rb`とする
– リソース毎にファイルが存在する。[^1]

[^1]: リソースとは、コントローラーの操作対象のデータのこと。

#モデル
データベースを取り扱う。

元記事を表示

Docker-compose buildが突然失敗するようになった原因

#はじめに
右も左もわからないプログラミング初心者が書く備忘録です。
膨大な勉強量の中で気になった事をメモしていきます。

#今回の内容
普段からDocker環境で制作を行っているのですが、突然 build が出来なくなるエラーに遭遇しました。
Dockerを使い始める時に気にはしていたのですが、ここに来て解消方法がわかったのでメモしておきます

#開発環境
Rails 6.1.3.2
ruby 2.5.1
Docker version 20.10.6

#原因

:::note alert
docker imagesによるホストディスク容量の圧迫
:::

#解決方法

:::note
docker system prune
:::

https://docs.docker.jp/config/pruning.html

#詳細
docker-compose buildした際のエラー文

“`
$ docker-compose build




Fetching sassc 2.4

元記事を表示

[初心者向け] なぜDocker imagesがホストディスク容量を圧迫するのか

#はじめに
右も左もわからないプログラミング初心者が書く備忘録です。
膨大な勉強量の中で気になった事をメモしていきます。

間違いや記事を見て良かったことなど
気軽にコメントを残して頂けると活力に繋がりますのでよろしくおねがいします:smiley:

#今回の内容
前回の記事

https://qiita.com/daisuke114/items/e79c54ab343004199c0f

の続きで、なんでimagesがそんな大容量になってしまったのかという所に焦点を当てていきたいと思います

ちなみに前回の記事に補足として記載しようとしていたのですが、思ったよりも長くなってしまったので記事として投稿させて頂いております。

#開発環境
Rails 6.1.3.2
ruby 2.5.1
Docker version 20.10.6

#なぜimagesが3.5GBもの大容量になっているのか

結論から言うと、アプリそのものが大容量になっているからでした
今回の原因はwebpackerでした

https://railsguides.jp/webpacker.html

dock

元記事を表示

【Ruby on Rails】コメント機能を初心者なりにまとめてみた(非同期)

#対象者

* コメント機能を実装予定の方
* 非同期通信(Rails×Ajax)を実装予定の方

#目的

* 記事へのコメントを非同期で投稿・削除ができるようにする

#実際の手順と実例
###1.前提

* jQueryの読み込みができている
* バージョン:Ruby:2.3.0、Rails:5.2.5です。
* Articleモデル、Userモデル実装済み

###2.モデルの作成とテーブル設定

まずコメントモデルを作成します。
UserとArticleとアソシエーションを組みます。

““
$ rails g model comment user:references article:references
““

その後、config/db/schema.rbにマイグレーションファイルが作成されているので、下記を追記していきます。

““`migration_file
class CreateComments < ActiveRecord::Migration[5.2] def change create_table :comments do

元記事を表示

Rails と SQL Server の組み合わせで DB ユーザーのパスワードを ‘#’ からはじまるものを使うと Rails アプリから接続できない

# 要約

記事タイトルのままですが、 DB ユーザーのパスワードを ‘#’ からはじまるものにしていると Rails アプリから DB に接続できません。

# 利用しているバージョン

– [CentOS](https://www.centos.org/): [7.6.1810](https://hub.docker.com/_/centos?tab=tags&page=1&ordering=last_updated&name=7.6.1810)
– [freetds](https://www.freetds.org/), freetds-devel: [1.1.20-1.el7.x86_64](https://centos.pkgs.org/7/epel-x86_64/freetds-1.1.20-1.el7.x86_64.rpm.html)
– [Microsoft SQL Server](https://www.microsoft.com/ja-jp/sql-server/sql-server-2019): [2019-latest](https://hub.docker.

元記事を表示

[Rails] 検索機能の実装

##はじめに
オリジナルアプリに検索機能を実装したので、簡単な仕組みを記事に残しておきたいと思います。

ソースコードはあくまで私のアプリから抜粋しているのでわかりづらいかもしれませんが、ご了承ください。

よろしくお願いします。

##検索フォームの作成
検索フォームはform_withを使って実装しました。
メソッドはgetで、“`local: true“`の記述は忘れずに記載します。

非同期で実装するときは“`remote: true“`となるのですが、form_withはデフォルトがremoteとなっていうので、記述する必要はないらしいです。

“`erb
<%= form_with(url: search_teachers_textbook_path(@teachers_textbook.id), remote: true, method: :get, class: "student-search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "生徒を検索する", class: "

元記事を表示

【テストコード】「Mysql is not connected」というエラー

#今回の概要
**①テストコードを行う**
**②「MySQL client is not connected」のエラーが発生**
**③「sleep」を記述して解決**

##①テストコードを行う
*◇下記のテストコードを行うときにエラーが発生*

“`perl:purchase_shipping_spec
require ‘rails_helper’

RSpec.describe PurchaseShipping, type: :model do
before do
@user = FactoryBot.create(:user)
@item = FactoryBot.create(:item)
@p_s = FactoryBot.build(:purchase_shipping, user_id: @user.id, item_id: @item.id)
end
describe ‘商品購入機能’ do

〜テストコードは省略〜
end
end
“`
##②「MySQL client is not connected」のエラーが

元記事を表示

[Rails]7つのアクションとActiveRecordについて

# はじめに
本記事では、ActiveRecordについて記述しております。
コントローラーのアクション内で記述しているメソッド(all,find…etc)を
`なんとなく`記述していること状況を無くすため改めてアウトプットします。

# ActiveRecordとは
`モデル`が`テーブル操作`に関して使用できるメソッドです。[以下訂正します。]

“`
[訂正]
ActiveRecordは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。

また、モデルがテーブル操作に関して使用できるメソッドではなく、「メソッドの総称」になります。

@koki_73 さん ありがとうございます!
“`

テーブルに情報を取得したり、保存したりするために使用することができます。
記述自体は`コントローラー`ですが、
モデルがテーブルに対してどのようなことを実行するのかを実行するのかを指定するものになります。

また、ActiveRecordはたくさんあります。
一つ一つどのような意味を持つのか理解をしなければ、意味が違うコ

元記事を表示

railsが起動できない。→bashとzshについて

#はじめに

rbenvを使ってrubyをインストールし、rails sで起動したところ、エラーになってしまいました。

“`
$ rails s
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`

そもそもrbenvを使ってrailsを起動することに丸一日かけてエラーを解決したのに、
翌日rails sをするとまたエラーに…

#原因

原因は単純で、シェルを理解していないからでした。

rbenvインストール後、PATHを通すために.bash_profileという設定ファイルに下記を書き込みました。

“`bash
export PATH=”$HOME/.rbenv/bin:$PATH”
eval “$(rbenv init -)”
“`

しかし私のターミナルはデフォルトでzshになっていること

元記事を表示

遭遇したエラー集

#Rspec failure/error: user = factorybot.build(:user) keyerror: factory not registered: “user”の解決
###解決法
spec/models/factories/users.rbをspec/factories/users.rbにして解決
#no such file or directory @ rb_sysopen – public/user_images/1.jpgの解決
###解決法
publicにuser_imagesフォルダを作る。
#Mysql2::Error: Duplicate column name ‘image_name’の解決
###解決策
migrationファイルを空にする=>rails db:migrate=>成功=>元の通りの記述をする=>rails db:migrate
#Gemfileがないエラー(間違えて消してしまったとき)+command+Zでも元に戻らないとき
“`
$ bundle init
“`
上記の実行でGemfileが作られる=>インストールした

元記事を表示

Rails6で起動できない。webpackerをインストール

#はじめに

railsで新しくアプリケーションを作ろうとしたが、rails sでエラーに…

#webpacker,yarnをインストール

エラー文を読んでみると、webpackerを構成するファイルがないようです。

“`
$ rails s
=> Booting Puma
=> Rails 6.1.4 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
…..
(省略)
…..
Please run rails webpacker:install
“`

と書いてあるので実行。

“`
$ rails webpacker:install

Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
Exiting!
“`

yarnをインストールする必要があるようです。

元記事を表示

cloud9でファイルを保存する際にFailed to write to ‘~~~~’が出た時に参考になったURL

![スクリーンショット 2021-08-10 13.38.30(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824308/660bc386-2157-df51-6c74-422015a46879.png)

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/requesting-ebs-volume-modifications.html#elastic-volumes-limitations

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

Cloud9が容量不足? EBSボリュームを拡張する方法を解説します!

https://zenn.dev/d0ne1s/scraps/2a83c362d097c0

元記事を表示

【Ruby on Rails】submitボタンにFontAwesomeのアイコンを表示する方法

#対象者

* form_withを使っている方
* submit btnをFontAwesomeで表示したい方

#目的

* FontAwesomeを使ってSubmitを表示する

#実際の手順と実例
###1.下記のように記載

““ruby
<%= form_with(model: [@article, @comment]) do |f| %>
<%= f.text_area :comment_content %>

#下記の部分
<%= button_tag type: "submit", class: "btn btn-default" do %>

<% end %>
<% end %>
“`

button_tag typeというメソッドを使っています。
これで、FontAwesomeのクラスを囲えば完成です。
問題なく投稿も行えます。

####投稿者コメント
FontAwesome多様するので今回やり方が全く分からず調べてみました。参考になれば幸いで

元記事を表示

別名の外部キーで紐付けたテーブルを結合する

調べてもぱっとわかる情報が見つからなかったので備忘録用に。

### 例えば
““user.rb
has_many :own_groups,
class_name: “Group”,
foreign_key: “owner_id”,
dependent: :destroy
““
““groups.rb
belongs_to :owner, class_name: “User”
““
というのがあったとする。

### コード
しかしjoinsするだけだとuserの情報を返してくれないのでselectする

““groups.rb
scope :with_owners_info, -> () do

.joins(:owner)
.select(”
groups.id,
groups.name,
groups.desc,
groups.updated_at,
users.id AS owner_i

元記事を表示

OTHERカテゴリの最新記事