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

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

【EC2・Rails】unicorn.logのエラーIs the server running on host “3.114.69.77” and accepting TCP/IP connections on port 5432? (PG::ConnectionBad)の解決法

unicorn.logの結果は下記の通り。

“`
Is the server running on host “3.114.69.77” and accepting
TCP/IP connections on port 5432?
(PG::ConnectionBad)
“`

##原因はいくつかある。

###Ec2内のデータベースにアクセスできる権限がない。

アプリディレクトリでpsql -lと打って下記のように表示されれば、権限がない可能性があります。

スクリーンショット 2020-05-26 12.10.1610.png

\lで確認しても権限がない。

スクリーンショット 2020-05-26 12.34.5234.pngEC2内で本番環境のコンソールに入れない際のエラーinvalid base64 (ArgumentError)の解決法

EC2内でコンソールに入ろうとbundle exec rails c -e productionをしたところ次のエラーが表示されました。

“`
[shogo@ip-10-0-0-221 Portfolio]$ bundle exec rails c -e production
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-4.4.1/lib/bootstrap/version.rb:4: warning: already initialized constant Bootstrap::VERSION
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:2: warning: previous definition of VERSION was here
/home/shogo/.rbenv/versions/2.6.3/li

元記事を表示

【EC2】本番環境でgit pull origin masterをしたのにCSSの変更が適用されない際の対処法

本番環境でアプリのディレクトリまでいき、下記を実行する。

“`
bundle exec rake assets:precompile RAILS_ENV=production
“`

で、アプリを再起動する。

“`
$ sudo service nginx restart
$ sudo systemctl restart postgresql
$ ps -ef | grep unicorn | grep -v grep
$ bundle exec unicorn_rails -c /var/www/rails/Portfolio/config/unicorn.conf.rb -D -E production
“`

終了です。

元記事を表示

【Rails】Devise、ActiveStorage、S3でユーザーアバターの実装

# 概要
タイトルの通りです。
事前にActionTextを使用していた関係で一部手順が抜けている部分もあるかもしれませんがご了承ください。
CarrierWaveを使用した記事も書いたのですが、ActiveStorageの方が何かと便利そうです。
[【Rails】Devise、CarrierWave、S3でユーザーアバターの実装](https://qiita.com/chabudai/items/2f41f960d5a68fd34e91)

# 環境
Ruby: 2.7.1
Rails: 6.0.2.2
Devise導入済み
(gem ‘devise’, ‘~> 4.7’, ‘>= 4.7.1’)

# 手順
今回は「avatar」という名称で実装してますが好みでimageなどに変更してください。

## ActiveStorageのインストール
以下の手順で「active_storage_attachments」と「active_storage_blobs」の二つのテーブルが作成されます。

“`zsh
$ rake active_storage:install

# DBマイ

元記事を表示

シンプルにRailsでStripeを動かす(コンソールで決済してみる)

## RailsでStripe gemをinstall

“`
gem ‘stripe’
“`

## RailsでStripe設定ファイルを手動で作る

“`
config/initializers/stripe.rb
“`

## RailsでStripeを鍵をセット

“`stripe.rb
Rails.configuration.stripe = {
:publishable_key => “あなたのPublishable key”,
:secret_key => “あなたのSecret key”
}

Stripe.api_key = Rails.configuration.stripe[:secret_key]
“`

## RailsでStripe決済する

“`
% rails c

> amount = 500
> token = ‘tok_jp’
> order_id = ‘sample_order_id’
> charge = Stripe::Charge.create(
amount: amount,
curr

元記事を表示

type: :mailer以外のrspecだとActionMailer::Base.deliveriesが空っぽ

# 困った
request specなどでも
`ActionMailer::Base.deliveries` を使ってテストがしたいのに
`type: :mailer` 以外のrspecだと `ActionMailer::Base.deliveries`が []のままで困った

きっとtype: :mailerの時は何かが裏で勝手にincludeとかしてるんだろうなーと思って

# 調べてみる
[rspec の type: :model とかについて](https://blog.kyanny.me/entry/2016/03/15/025321)
という記事を見つけた
どうやらそういうことらしい

typeに応じてここにあるものが読み込まれるのかな?
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/example/

ってことで試してみる

# 解決
“`rb:rails_helper.rb
RSpec.configure do |config|
.
.
.
config.include RSpec

元記事を表示

Docker for Mac の Mutagen-based cachingを使ったらホスト側のファイルの変更が反映されなくなった

# 何が起きたか
[Docker for Mac の Mutagen-based caching で Volume のパフォーマンスが劇的に改善した](https://qiita.com/nanasess/items/16ab9274c34bdc34e567)
こちらの記事を見て試してみたらrspecとかrubocopとか爆速になってうおおおおおおってなったけど
`swagger.ymlのホスト側での変更がredocのコンテナ内に反映されなくなってしまった`
しかし、railsプロジェクトの方は問題なく反映されていてなんでだろうと思ったら

# 原因
“`yml:docker-compose.yml
version: ‘3’
services:
redoc:
image: redocly/redoc:latest
volumes:
– ./swagger.yml:/usr/share/nginx/html/swagger.yml
environment:
SPEC_URL: swagger.yml
ports:

元記事を表示

ssh接続をする際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」

同じIPアドレスでサーバを用意した場合、SSHで接続するときに下記のようなエラーがせることがある

“`
$ ssh root@123.123.123.123
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote

元記事を表示

herokuデプロイ

データベースをpostgreSQL以外を使っている場合はそのデータベースのgemをコメントアウトして、
Gemfileの一番下に本番環境ではpostgreSQLを使うことを宣言してbundle installする。

“`ruby:Gemfile
# gem ‘mysql2’, ‘>= 0.4.4’, ‘< 0.6.0' group :production do gem "pg" end ``` jQueryにてテンプレートリテラルを使用した場合は下記の文章をコメントアウトする。 ```ruby:environments/production.rb # config.assets.js_compressor = :uglifier ``` あとはherokuで登録が完了していればログインする。 ```ruby:ターミナル $ heroku login ``` その後、GitHubで管理しているアプリをheroku上に作成する。 ```ruby:ターミナル $ heroku create アプリ名 ``` GitHubでcommitとPushをしてmasterにマー

元記事を表示

Railsで大量データを削除する方法と懸念点

# はじめに
皆様、こんにちは!
佐久間まゆちゃんのプロデューサーの@hiroki_tanakaです。

私はRailsアプリケーションの保守に関わっているのですが先日、本番環境に大量の不要データが存在していることが判明しました。
それがキッカケでRailsでの大量データの削除方法を検討したので、調べたことをまとめました。

# Railsにおけるdestroyとdeleteの違い
まず、Railsには2つのデータ削除メソッドのdestroyとdeleteがあります。
それぞれの違いを簡単にまとめたいと思います。

### destroy/destroy!
ActiveRecordを介して指定した1レコードを削除します。
ActiveRecordを介するためcallbackメソッド(`before_destroy`や`after_destroy`など)やvalidationが機能します。
また、削除対象のModelに`dependent: :destroy`が設定されている関連Modelが存在している場合は、設定されているModelも一緒に削除します。
destroyは実行時にエラーが

元記事を表示

[Rails]N+1は悪!発生したらとりあえず解消せよ!!という考えは危険

# N+1

それは諸悪の根源!パフォーマンスの敵!!
見つけたらすぐに撃退すべき悪しき存在です!!!

と思われている方が多いと思います。

実際その通りで、ネットで調べてもN+1を解消するノウハウが溢れています。

基本的にはノウハウ通りに修正すれば良いのですが、まれにN+1は解消しない方が良いパターンもあるので具体例を交えて紹介します。

# この記事で話したいこと

この記事で話したいことは、なぜN+1は直すべきなのか?ということです。
N+1はあまりに有名すぎて直すノウハウはたくさんありますが、なぜ直すべきなのかが忘れられている感があります。
1つ言っておきたいのは、N+1を直すのはクエリー発行数を減らしたいからではないです。パフォーマンスを改善したいからです!
言い換えるとクエリー数が減ってもはフォーマンスが改善しないのであればN+1を直す必要はないのです。

# N+1とは

最初に典型的なN+1を復習しておきましょう。

下記のモデルを使って説明します。

* ユーザー(user)は複数の記事(articles)を持っている
* 記事には複数の写真(images)を添付

元記事を表示

[Rails]strftimeあれこれ

# 前置き
現在Railsでマッチングアプリ作成中ですが、strftimeをよく使うので、すぐ見れるよう書き方をまとめておきます。

# strftimeって?
日時データを好きなようにビューに表示出来るメソッドです。

# やってみよう

今回はcreated_atでやっていきます。

デフォルトだとこうですね。後ろの+0900は使わなさそうですね。
2020-05-22 16:11:01 +0900

“`ruby
created_at.strftime(“%Y-%-m-%-d %-H:%M”)

# 表示 2020-5-28 20:25
“`

こんな風に文字列変換出来ます。
適当に記号並べているわけではありません。笑

下記に書式を一部添付しておきます。
もっと知りたい方はこちらにあります。
引用元[pikawaka](https://pikawaka.com/rails/strftime)

| 書式 | 返り値 | 説明 |
|:–|–:|:–|
| %Y | 2019 | 西暦を4桁の数で取得する※西暦1年は「0001」 |
| %m | 01 | 月を必ず2桁

元記事を表示

Railsアプリで初めて自作ヘルパーを使ってリファクタリングした話

#はじめに
今までRuby on Railsでアプリケーションを作成していて
ふと気になったことがありました。

コントローラー作成時に毎回ついてくるコイツ
〇〇_helper.rb
このファイル何に使うんだろ…。
ヘルパーって書いてあるからヘルパーメソッドに関係しているのかな…??

この時、私は
“わざわざ同時に作成される物だからきっと便利なファイルに違いない”
と、興味の向くままにQiitaで解説記事などを調べてみました。

#結論
自作のヘルパーメソッドを記述するファイルのようです。
(自作ヘルパー == カスタムヘルパー と言うらしい)
ヘルパーメソッドは今日の今日までGemに用意されているモノしか使用したことがなかったので
これは便利そうだ、と直感で思いました。

#さっそく使ってみた
他の方のQiita記事を参考にさせていただき
今回は個人開発したアプリのコードリファクタリングに使用してみました。
コントローラー内のリファクタリング内容を本記事の内容にします。

###環境
Rails 5.2.3
Ruby 2.5.1

###使い方

まずはリファクタリングを

元記事を表示

個人的に頻繁に使ったRSpec集

RSpecを書いているうちに、「これとよく似た比較書いたけどどのプロダクトのどのSpecだっけ?」って探して時間を取られた事があったので、ここに記事としてまとめておきます。未来の自分と他の開発者の方に役立つ事を願って。

## エラーログが出力されている事を確認。

“`ruby

it ‘エラーログが出力される事’ do
expect(Rails.logger).to receive(:error).with(/code: 400/)
# 以下、テストしたい処理を書く
end
“`

ポイントとしては

– expectをitの一番最初に書く。こうしないとログの出力メソッドがreceiveによって捕捉されません。
– `with`の中に、含まれていてほしいメッセージを書く。そのまま書くと完全一致にならないとパスしないので、スラッシュで囲むことで、特定のメッセージを含んでいた場合のケースを書くことができます。いわゆる正規表現。

[参考にしたサイト](https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting

元記事を表示

Ruby 自作クラスの配列をソートする

#Ruby 自作クラスの配列をソートする

**100日後に1人前になる新人エンジニア(8日目)です**

あれ自作したクラスの入った配列ってどうやってソートするんだっけ…
って今日ちょっと詰まってしまったのでメモとして残しておきます。

###自作のクラス

“`user.rb
class User
attr_accessor :name, :age, :height

def initialize(name, age, height)
@name = name
@age = age
@height = height
end
end

user1 = User.new(“foo”, 15, 190)
user2 = User.new(“bar”, 80, 150)
user3 = User.new(“baz”, 28, 168)
users = [user1, user2, user3]
“`

こんな感じで自作のユーザークラスを作りそれらをusersという配列に入れる
このusersの並べ替えについて今日は考える

**とりあえずソートし

元記事を表示

【Rails初心者必見】Ruby on Railsでversion指定をしてWebアプリを作成する方法

## 開発環境

ruby 2.6.4

Rails 6.0.2.2

## やりたいこと
Rails初心者にとって開発環境を整えるのは難しいですよね
環境構築で挫折してほしくないんです!

そこで今回は環境設定の一部ではありますが、Railsのバージョン指定して新規プロジェクトを作成していきます
## versionを指定して新規プロジェクトを作成する
### ステップ1. 特定のRailsのバージョンをインストール
“`
$ gem install rails -v 6.0.2.2
“`

## ステップ2. インストールしたRailsを確認
“`
$ gem list rails
“`

## ステップ3. インストールしたRailsのバージョンを指定して新規プロジェクトを作成
“`
$ rails _6.0.2.2_ new twinz_blog
# twinz_blogの箇所にはアプリ名を入れてください
“`

すごく簡単にできましたね!

## 参考文献
【Rails初心者必見】Railsのversionを指定して新規プロジェクトを作成する方法
https:

元記事を表示

【Rails】deviseでユーザー詳細ページを作成する【お手軽実装】

## はじめに

Ruby on Railsでユーザー詳細ページを作成する方法を記事にしました。

ソースコードは[こちら](https://github.com/koutanakajima/RubyCode/tree/master/RailsOriginalApps/todoapp)のGitHubに載せておきます。
## 前提

– ユーザーログイン機能にはgemの「devise」を使用
– Userモデルの作成は本記事の対象外です。ユーザーモデルがある前提で話を進めます。もし作成していなければ[こちら](https://nakajimakouta.com/2020/05/25/ruby-on-rails-todo-devise-user-login/)の記事でハングオンしていただけると幸いです。
– ユーザーモデル追加カラムは「username」「profile」「image」の3つ

## 開発環境

| 内容 | バージョン |
|:—————–|——————:|
| Ruby |

元記事を表示

fullcalendarのイベントを特定の条件のイベントだけ表示させる方法

Qiita初投稿です。よろしくお願いします。
fullcelndarのイベントをユーザー詳細画面でそのユーザーのみのイベントで表示させる時に、苦戦したので備忘録として投稿させていただきます。

#準備
本記事は特定のイベントの表示を目的にしているため、準備は自分が参考にした記事を貼らせていただきますので、参考にしていただけたらと思います。この記事の通りに実装してもらったらカレンダーは表示できると思います。
[参考記事](https://qiita.com/sasasoni/items/fb0bc1644ece888ae1d4)

#目的
では、本来の目的であるユーザーのみのイベントを表示させていきます。

#実装
###ログイン機能の実装

“`ruby:Gemfile
gem ‘devise’
“`

“`:ターミナル
$ bundle install
$ rails g devise:install
$ rails g devise User
$ rails db:migrate
$ rails g devise:views
“`
これでユーザーの新規登録ができるようにな

元記事を表示

データの並び替え降順、昇順/Railsでまとめてみた

投稿したデータや記事の並び替えを変える際に、descが降順?降順?で毎回ググって調べていたのでまとめました。

“`ruby:board.rb
class Board < ApplicationRecord scope :desc, -> { order(created_at: :desc) } #作成の降順
scope :asc, -> { order(id: :asc) } #idの昇順 デフォルトでasc(昇順)で表記されるので明示的に書くことは少ない
end
“`

元記事を表示

個人アプリRails6.0をHerokuにデプロイした時の失敗話

# 背景
 個人でRailsアプリをHerokuへデプロイしようした際に、つまづいたポイントが2点あったので記事にします。

1. DBをMySQLで作成してしまった。
– master.keyの設定をミスっていた。

# 1. DBをMySQLで作成してしまった。
 結論:HerokuへデプロイするならPostgreSQLを使うべきです。
## なぜMySQLだといけないのか
 Herokuの無料枠でMySQLを使う場合、ストレージが5 MBの制限があります。一方PostgreSQLの場合、ストレージ制限ではなく、10,000行使用可能になります。個人アプリで5 MB、使用すことはあっても10,000レコード使うことは少ないと思うのでPostgreSQLを使用することをお勧めします。

## MySQL ⇒ PostgreSQL へ変更
Rails6.0からデータベースの変更は簡単に行えるようになりました。ターミナルで以下のコマンドを実行すると

“`ruby:ターミナル
rails db:system:change –to=postgresql
“`
## Postgre

元記事を表示

OTHERカテゴリの最新記事