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

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

SequelでPG::ConnectionBad: PQconsumeInput()エラーが出るようになって困った話

# 急に出始めた PG::ConnectionBad: PQconsumeInput() エラー

RailsでActiveRecordを使わずSequelをORMとして使っているのだが、いつからかRails起動直後のRDS(Postgresql)接続時に「PG::ConnectionBad: PQconsumeInput()」エラーが出るようになってしまった。

“`
PG::ConnectionBad: PQconsumeInput() SSL error: decryption failed or bad record mac
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
PG::ConnectionBad: PQconsumeInput() SSL error: sslv3 alert bad record mac
“`

Sequel側は変えていないのでRDSで何か仕様変更があったのか・・・。RDSのCA証明書の変更の影響かと思ったが、変更する前から当エラーは出て

元記事を表示

Rails deviseの導入〜新規登録、ログイン時のカラム

# 初めに
某プログラミングスクールの卒業生です。
スクールに通う中で学んだことや、つまづいたことを備忘録としてまとめてます。
今回は、deviseを扱う際に必ず調べるであろう、独自カラムの追加方法をdeviseの導入からまとめておきたいと思います。
# 環境
・Ruby 2.5.7
・Rails 5.2.4.1
# deviseの導入
deviseとは、ログインや新規登録機能等を簡単に実装できるgemです。
まず初めに、Gemfileに以下の1行追加して保存します。

“`ruby:Gemfile
gem ‘devise’
“`
次にターミナルで下記を実行し、deviseをアプリケーションに読み込ませます。

“`
$ bundle install
“`

最後にターミナルで下記を実行し、deviseの初期設定を行います。

“`
$ rails g devise:install
“`

“`
Running via Spring preloader in process 29980
create config/initializers/

元記事を表示

【Rails】小数点と3桁ずつ区切るカンマ

1234.50

“`ruby
“#{(product.price).to_f}”
=> 1234.5

“#{(product.price).to_s(:delimited)}”
=> 1,234.5
“`

元記事を表示

【Rails】PayjpのRSpecテスト、モックを使用してコントローラテストを実装する

# はじめに
payjpなどの外部APIと通信するRailsアプリの場合、
テストする時には実際に通信が走ってしまっては困ります。
今回は、ダミー(テストダブル)を作成して、ダミーのモックを返すようにすることで、コントローラのテストを実装します。

実装のサンプルコードだけ知りたい場合は、【サンプルコード】の項目までスクロールしてください。

# 普通にテストを実装すると
コントローラーのテストでは一般に以下を実装します。

– コントローラーのアクションに対応するビューが正しく表示されるかどうか
– リダイレクトが正しく行われるかどうか
– インスタンス変数が正しく定義されているかどうか

もし、以下のようなコントローラーがあった場合について考えます。

“`ruby:card_controller.rb
def index
customer = Payjp::Customer.retrieve(“cus_xxxxxxxxxxxxx”)
end
“`

今回はindexのアクションはindexのビューが表示されることをテストします。
コントローラのスペックでは以下のようになり

元記事を表示

RailsエンジニアがDDDやクリーンアーキテクチャに触れるためにとりあえずHanamiを始めてみる

# Introduction

これまで Rails をそれなりにやってきて、ちょっとしたWebアプリならそれなりサクッと作れるようにはなりましたが、 Fat Controller だの Fat Model と言われるようにどこかで臨界点が来て、従来のMVCアーキテクチャとは違う別の設計を模索してみたい欲が出てきました :flushed:

そのとっかりとして、巷で話題の **クリーンアーキテクチャ** に触れるために、 Rails の対抗馬として名乗りを挙げた Ruby 製フレームワーク **Hanami** を始めてみようかと思いました :fire: :fire: :fire:

# Install

まずは Hanami を立ち上げてみます。

“`
$ mkdir hanami-tutorial
$ cd hanami-tutorial
$ bundle init
“`

Gemfile を書き換えます。

“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git

元記事を表示

capistrano でreleasesがいっぱいになるときの対処法

以下の記事を参考にした。

[Rails deployment to Amazon EC2 – No space left on device](https://stackoverflow.com/questions/19568057/rails-deployment-to-amazon-ec2-no-space-left-on-device)

以下のコードを追記すれば良いみたい。

“`erb:config/deploy.rb
set :keep_releases, 5
+ after “deploy:restart”, “deploy:cleanup”
“`

以上

元記事を表示

capistranoで自動デプロイを実行すると、No space left on deviceと言われた

### 状況
bundle exec cap production deployというコマンドを叩き、自動デプロイを実行しようとすると、No space left on device
というエラーが出て、途中で止まってしまった。

### 対処法
まず、以下の記事を参考に対処法を探った。
[No space left on device とエラーが出るときの対処法
Linux](https://qiita.com/0x50/items/ecc6cfdbb8a3f0c0855f
)

“`erb:teminal
$ df -i
ファイルシス Iノード I使用 I残り I使用% マウント位置
devtmpfs 121370 281 121089 1% /dev
tmpfs 125870 2 125868 1% /dev/shm
tmpfs 125870 363 125507 1% /run
tmpfs 125870 16 125854 1%

元記事を表示

capistranoでbundle exec cap production deployを実行した時のエラー

### 何が起こったか?
capistranoを設定して、bundle exec cap production deployを実行して自動デプロイを行おうとしたところ以下のようなエラーに遭遇した。

“`erb:terminal
OpenSSH keys only supported if ED25519 is available (NotImplementedError)
net-ssh requires the following gems for ed25519 support:
* ed25519 (>= 1.2, < 2.0) * bcrypt_pbkdf (>= 1.0, < 2.0) See https://github.com/net-ssh/net-ssh/issues/565 for more information Gem::LoadError : "ed25519 is not part of the bundle. Add it to your Gemfile." (Backtrace restricted to imported tasks) cap

元記事を表示

[HowTo]ActiveStorage/アバター画像を登録&表示

先日、Active Storageを使用してアバター登録機能を実装しましたので、備忘録として以下に手順などをまとめておきます!
皆様の開発に少しでも役立てていただければ幸いです。

#Active Storageとは
Active Storageとは、Rails 5.2以降に追加された機能で、ファイルのアップロードを可能にします。
似たような機能でCarrierWaveというものもございますが、こちらは過去に記事にしていたので、
今回はActive Storageを使用することにしました。
https://qiita.com/Tatsu88/items/66374abda7245a006ea0

#Active Storageの特徴
ActiveStorageはactive_storage_attachmentsとactive_storage_blobsの2つのテーブルを作成します。
アップロードした情報はこれらのテーブルに格納され、モデルと関連づける必要があります。

#完成イメージ
今回はマイページのアバター実装を目指します。
まず、アバター情報がないときは以下のイメージとなります

元記事を表示

インクリメンタルサーチで追加済みユーザーが検索されないようにする

## 目的
チャットアプリのグループメンバー追加ページを以下の仕様で作成する。
– インクリメンタルサーチでメンバー検索をして登録リストに表示
– 登録リストに表示されたメンバーを登録ボタンで追加リストに登録
– 登録されたメンバーは登録リストに表示されない

## 問題点
登録されたメンバーが登録リストに表示されてしまう。

## 考え方
検索されたメンバーのIDが追加リストに登録されたメンバーのIDと重複しない場合のみ表示させれば良い。

## コード
“`javascript:before.js
users.forEach(function (user) {
if (user.id) {
addUser(user);
}
})
“`
“`javascript:after.js
users.forEach(function (user) {
let idNum = document.getElementById(user.id);
if (user.id && !idNum) {
addUser(user);
}
})
“`

元記事を表示

Railsで、どちらか一方のカラムを入力必須(二者択一)にするバリデーション

## はじめに
Ruby on Rails で どちらか一方のカラムを入力必須にするバリデーションについて書きます。

具体的な例をあげると、ユーザーモデルの`email`と`phone`、どちらか片方だけに必ず値が入るようにバリデーションします。

## 要件に合わなかったバリデーション
ググって下記のようなバリデーションを見つけましたが、両方入力した場合にバリデーションを通ってしまうので、要件には合いません。

“`ruby:app/models/user.rb
class User < ApplicationRecord # phoneが空ならば、emailを必須にする validates :email, presence: true, unless: :phone? # emailが空ならば、phoneを必須にする validates :phone, presence: true, unless: :email? end ``` ```ruby User.create!(name: "たなか", email: "test@example.com", pho

元記事を表示

EC2サーバで生成した公開キーはどこからどこまでなのか

>cat ~/.ssh/id_rsa.pub

コマンドで作った公開キーは、どこからどこまでなのか?

###結論

ssh-rsa AAA…
から始まって、

…== ec2-user@ip-000-00-00-000
までが

公開キーです

GitHub で SSH keyを登録するときの参考になればと。

元記事を表示

チーム開発 3/19

メモです
最終課題二日目
トップページを担当

検索機能をつける際に検索ボタンを画像に引っ付けたい
https://teratail.com/questions/60004
参考サイト
button_tagもしくはimage_submit_tagを使うと解決

画像の大きさを自由に変えた(ブロックに合わせた大きさ)
https://qiita.com/jag_507/items/79af40e12a2e50bbc04e
https://teratail.com/questions/39407
参考サイト
まず大きさを変えたい画像のimgにクラスをつける
そこに
max-width: 100%;
height: auto
を記述する

検索機能にクラスを書きたいがエラーが出た
多分form_tagの書き方が悪い
form_withで解決した

Formにcssの要素をつけたい
form{}で要素をつけれる

html li リストマーク(・)消す方法
list-style: none;

ブロック全体に画像を貼る時に使う
background-image: url(pict/bg-mai

元記事を表示

定義してないのになぜか使える activated? admin? メソッド Ruby on Rails チュートリアル

こんなメソッド定義してないぞ?と思いきや、
Railsでは真偽値をとるカラムであれば、モデル.カラム名?で真偽値を取得できるらしいです。

![user_model_account_activation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302052/40210e47-806e-0e05-dd08-862827f486e0.png)

“`ruby
>> user = User.first
User Load (0.1ms) SELECT “users”.* FROM “users” ORDER BY “users”.”id” ASC LIMIT ? [[“LIMIT”, 1]]
=> #

元記事を表示

初めてのbootstrap導入(rails)

## はじめに
bootstrapを導入する時に手間取ってしまったので、初めてbootstrapを触ってみる人でもわかりやすく、導入手順を一からおさらいします:baby_tone1:超初級編です:baby_tone1:

## ① Gemfileの末尾にbootstrapを追加

“`ruby:Gemfile
gem ‘bootstrap’
“`
**この時、compass-railsというgemが追加されてあるとエラーを吐いてしまうので、なくて問題ないようなら削除します。**
## ② gemの更新

“`ruby:command
$ bundle install
“`

## ③ application.cssにbootstrapを導入
app>assets>stylesheet>application.css

“`ruby:application.css
@import “bootstrap”;
“`
application.cssをapplication.scssに名前変更

## ④ application.jsにもbootstrapを適

元記事を表示

RailsのformにAjaxを実装する前提

RailsにjQueryを使ったAjaxを適用するために色々調べました。
個人的な備忘録として残します。

#configを設定

“` config/application.rb
require File.expand_path(‘../boot’, __FILE__)

module SampleApp
class Application < Rails::Application config.action_view.embed_authenticity_token_in_remote_forms = true # 追加 end end ``` #コントローラーの変更 ``` class HogesController < ApplicationController def hoge respond_to do |format| format.html redirect_to hoge_path format.js # ※下 end end end ``` ※ renderで指定しなければ`ア

元記事を表示

redis-railsのセッション有効期限の挙動を確かめて遊ぶ

# redis-railsのセッション有効期限の挙動をチェック
ローカルでサイトにアクセスすることで3ヶ月の期限付きセッションデータが生成される設定をしている。

redisを起動

“`bash:command
redis-cli
“`

DB1を選択する(設定によって変わります)

“`redis-cli:redis-commands
select 1
“`

サイトにアクセス、キー一覧を取得。
=>1件のデータが作られている

7889224とは秒数のことで、有効期限である。
![77042128-7e4ff380-69fe-11ea-86d9-fb4b7b14e5e6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69647/548e9187-e744-63d0-564e-8bd3d91c8d30.png)

### 【有効期限を無期限にするとどうなる?】
再度サイトにアクセス

* データは1件しかないので、セッションは新規に作られた訳ではない
* 有効期限が無期限(-1)になり、過

元記事を表示

Ruby on Rails チュートリアル学習記録 第6章

第4、5章については特に書く内容がなかったため学習記録は付けませんでした
# 6.1
特になし
# 6.2
特になし
# 6.3
`heroku run rails db:migrate`を`bash: heroku: command not found`というエラーメッセージ。
[3章](https://qiita.com/okbiz07/items/7cb45e325ae4afd0c549)の時と同じ方法で解決
`nvm install node`
`npm install -g heroku-cli`
を実行後、あらためて`heroku run rails db:migrate`を実行
# 6.4
特になし

元記事を表示

【Rails】フレンドリーフォワード

#フレンドリーファワード
ログインしていないユーザーが編集ボタンをクリックする際に、ログイン後にトップページではなく編集ページに飛ぶようにしたい。
そういった機能を追加できるのがフレンドリーフォワードです。

#実装

“`sessions_helper.rb
def store_location
session[:forwarding_url] = request.original_url if request.get?
end
“`
“`users_controller.rb
def logged_in_user
unless logged_in
store_location
flash[:danger] = “please login”
redirect_to login_u

元記事を表示

elasticbeanstalkにcronoを設定したので、そのconfig

# Elasticbeanstalk + rails + crono

railsでcron的なものを使いたかったけど、crontabを触りたくなかったので、cronoを使うことにした.その設定ファイル(結構作るのに時間かかったので。。。)
Cronoは[こちら](https://github.com/plashchynski/crono)
I would like to use something like cron with rails, but didn’t want to use crontab, so I try to use crono(I know it may not be maintained, but…), here is the config which I used.

## 環境
“`console
# rails -v
Rails 6.0.2.1
# uname -a
Linux ip-172-31-27-188 4.14.165-103.209.amzn1.x86_64 #1 SMP Sun Feb 9 00:23:26 UTC 2020 x86_6

元記事を表示

OTHERカテゴリの最新記事