Ruby関連のことを調べてみた2020年01月11日

Ruby関連のことを調べてみた2020年01月11日
目次

rails: will_paginateを共通化してみた

### 前提
※ 本投稿では“will_gaignate“の使い方の解説はしません
でも、間違ってアクセスしてきた人のためにREADMEのリンクだけ添付しておきます。
[will_paginate](https://github.com/mislav/will_paginate/blob/master/README.md)

### 何をしたいのか
“will_paginate“はとても便利な“gem“ですが、実際に使うとコード一行が長くなりがち。
“paginate“に加えて、他のメソッドも呼び出したりしていると、“rubocop“にLine is too longに怒られる可能性がある。
“paginate“で、“per_page“を設定することはあっても、“page“を設定しない場合がある。
なので、もっとシンプルに出来ないかを僕なりの方法で以下のようにしてみた。

### 解説
1. “concerns“の中で共通モジュールを作成する
2. モジュールの中で“WillPaginate::ViewHelpers“を読み込む
3. “sco

元記事を表示

Dockerで環境構築する際、ソースコードの変更が即時反映されない場合の対処法

##記事の目的
docker-composeで環境構築する際に起こったRailsのソースコードを修正しても即時反映されない問題に対しての対処法を共有すること。

## 対処法

###1.development.rbを編集

開発環境用の設定ファイルである “`config/environments/development.rb“` を編集。
「 ~ 」は元々の記述を省略しているものとする。
この中に“`config.reload_classes_only_on_change = false“`という記述を追加する。

“`development.rb

Rails.application.configure do

~
config.reload_classes_only_on_change = false

end

“`
###2.railsコンテナを再起動

設定を記載しただけでは反映されないので、最後にRailsを再起動する。

ターミナル上で、

“`
$ docker-compose restart
“`
と入力する。

以上でソースコードの変

元記事を表示

はじめてAWSでデプロイする方法③(AWSセキュリティグループの設定)

## これまでの記事
[はじめてAWSでデプロイする方法①(インスタンスの作成)](https://qiita.com/nousi/items/f0ab345402362e43db80)
[はじめてAWSでデプロイする方法②(Elastic IPの作成と紐付け)](https://qiita.com/nousi/items/0fe964f0be7e1cfa2ca1)

## 前回までの流れ
作成したEC2インスタンスとElastic IPを紐付けして、パブリックIPを固定にした。

## 今回の流れ
###現状
現時点において、HTTP(www.サイトURL)で接続することはできない。
![スクリーンショット 2020-01-10 16.13.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455403/c360d16a-1749-b73b-464a-7745f313329b.png)
(ターミナルでEC2とSSH接続は可能。)

つまり、一般ユーザーは閲覧することはできない状態である。
なので、

元記事を表示

bundle installするときに “can’t find gem bundler (>= 0.a) with executable bundler (Gem::GemNotFoundException)” とErrorが出る

# 問題が起きたらググれって偉い人が言ってた

対象のディレクトリ下でbundle installするときに起った現象のメモ
※初学者なので細かめに記載

git cloneしたアプリのgemを入れようとしたら以下のエラーが出た。

“`ruby:console
Traceback (most recent call last):
2: from /Users/mac/.rbenv/versions/2.5.3/bin/bundler:23:in `


1: from /Users/mac/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path’
/Users/mac/.rbenv/versions/2.5.3/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe’: can’t find gem bundler (>= 0.a) with executable bundler (Gem::GemNotFoundExcept

元記事を表示

Railsでカンマ区切り+小数点以下表示で数値を出力する方法

# 目的
整数部をカンマ区切りで表示し、小数点以下を表示したい

# コード
“`rb
number_with_precision(123456789, precision: 2, delimiter: ‘,’)
#=> “123,456,789.00”
“`

# 参考リンク
[ruby-on-rails — 大きな数字にカンマを追加するためのRailsトリックはありますか?](https://www.it-swarm.net/ja/ruby-on-rails/%E5%A4%A7%E3%81%8D%E3%81%AA%E6%95%B0%E5%AD%97%E3%81%AB%E3%82%AB%E3%83%B3%E3%83%9E%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AErails%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/967301

元記事を表示

はじめてAWSでデプロイする方法②(Elastic IPの作成と紐付け)

## 前回の記事
[はじめてAWSでデプロイする方法①(インスタンスの作成)](https://qiita.com/nousi/items/f0ab345402362e43db80)の続きになります。
インスタンスの作成などを知りたい場合は、この記事を参照してください。

## 今回実施していくこと
作成したEC2インスタンスには、作成時にIPアドレスが””自動””で割り振られています。
これをパブリックIP(一般公開用のID)と言います。
しかし、””サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点””を持っています。

そのため、パブリックIDを固定して、いちいち更新しないようにします。
この固定化したパブリックIDを『 Elastic IP 』と呼びます。

今回はその欠点を改善するために、『 EC2インスンタンスとElastic IP紐付け 』をしていきましょう。

## Elastic IPの作成
Elastic IPとは、AWSから割り振られた固定したパブリックIPアドレス。
このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタ

元記事を表示

【Rails】has_secure_passwordメソッド

has_secure_passwordメソッドについてのメモです。

準備

usersテーブルにpassword_digestカラムを追加しておく。

bcryptをインストールする。

“`ruby:Gemfile
gem ‘bcrypt’
“`
“`bash:ターミナル
$ bundle install
“`
モデルに`has_secure_password`を記載する。

“`ruby:app/models/user.rb
class User < ApplicationRecord has_secure_password end ``` 機能 - - 暗号化されたパスワードがpassword_digestカラムに保存される。 - 仮想属性`password_confirmation`を使用して、入力ミスを減らすためにパスワードの確認入力をさせることができる。 - authenticateメソッドを使用して、メールアドレスとパスワードに基いてユーザー認証を行うことができる。

元記事を表示

Railsアプリケーションのメモリが膨れ上がる問題

次のグラフは、Herokuで運用している、とあるRailsアプリケーションのMemory Usageです。1日1回再起動がかかったあと、スワップが発生するまでメモリ使用量が増え続けます。特に大きなデータをメモリ上に置き続けているわけではありません。

![memory-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308595/e66cace3-badf-7916-099b-900f3a04e09d.png)

Passengerの作者Hongli Lai氏が、Rubyのメモリが膨れ上がる問題について研究して記事を書いています(2019年3月)。

– [What causes Ruby memory bloat? – Joyful Bikeshedding](https://www.joyfulbikeshedding.com/blog/2019-03-14-what-causes-ruby-memory-bloat.html)

日本語での概略は、次の記事の真ん中あたりで読めます。

– [Eu

元記事を表示

はじめてAWSでデプロイする方法①(インスタンスの作成)

## AWSアカウントのリージョン設定をしよう
リージョンとは、AWSの物理的なサーバの場所を指定するものです。リージョンは世界各地に10箇所以上存在し、そのうちの一つは東京にあります。
リージョンを東京に設定していきましょう

### 手順
1.  [コンソールにアクセス](https://ap-northeast-1.console.aws.amazon.com/console) 

2. 画面右上にある『 国 』を『アジアパシフィック(東京)を選択』
![スクリーンショット 2020-01-10 13.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455403/c7cec815-8ebf-bd94-6de9-bb1c6c3500c4.png)

## EC2インスタンスを作成
「サーバーを生成する」といっても、AWSが全てのサーバを物理的に用意しているわけではなく、実際には「仮想マシン」と呼ばれるソフトウェアを利用しています。
この「仮想マシン」のことをAWSでは「EC2インスタン

元記事を表示

rails usersテーブルの値をpasswordなしで更新する

##はじめに
Userテーブルのカラムを**passwordなし**で更新しようと思ったときに、更新ができずに手間取ってしまったのでその備忘録として記載する。

##概要
usersテーブルに**profile**というカラムを持たせていたのだが、**ユーザー登録後**にユーザーページからユーザー情報を更新したい。

##ぶつかった課題
controllerで以下のように定義して実行した際にRollbackが起こり、値が更新されなかった。

“`ruby:mypage_controller.rb
class MypageController < ApplicationController # 途中略 def update user=User.find(current_user.id) #パスワードなしでのプロフィールの変更 user.update_without_password(nickname:params[:mypage][:nickname],profile: params[:mypage][:p

元記事を表示

Railsで開発した個人アプリにDockerを導入する手順と最低限の知識

Railsで開発した個人アプリに、後からDockerを導入しました。
その時知識不足なせいでハマってしまった場面があったので、自分の中で整理してアウトプットすることを目的にこの記事を書き残します。

ちなみに、以下の記事を主に参考にさせていただきました。
[DockerをMacにインストールする](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
[Docker + Rails + Puma + Nginx + MySQL](https://qiita.com/eighty8/items/0288ab9c127ddb683315)

# RailsアプリにDockerを導入する手順+事前知識
まずは事前知識として、これは知っておいたほうがいいというものを簡単に書いていきます。

## 事前知識 – Docker関係

### Docker(ドッカー)

※1.軽量な仮想化環境を実現するためのツール。

OS やアプリケーションを設定したものを丸ごと実行イメージとして保存できるので、Docker が導入されている別のマシンにそ

元記事を表示

bundle install時に”[DEPRECATED] The `–path` flag is deprecated”という警告が発生した場合の対応手順

## はじめに
Bundler 2.1ではBundler 3で使えなくなる機能に対して警告が表示されるようになりました。

参考:[【翻訳】Bundler 3アップグレードガイド \- Qiita](https://qiita.com/jnchito/items/d3257a5f46f4f1aee200)

この関係でBundler 2.1では`bundle install`に`–path`オプションを付けると以下のような警告が発生します。

“`console
$ bundle install –path vendor/bundle
[DEPRECATED] The `–path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path ‘vendor/bundle’`, an

元記事を表示

既存のRailsアプリをDockerコンテナで動かす方法+sequel proによるDBコンテナ可視化

# はじめに
新規アプリをDocker環境で開発するやり方はたくさんあるけど、既存アプリをDocker環境で構築するやり方は全然見当たらず、わりと苦労しました。
振り返ってみると新規アプリでの構築の仕方とあまり変わらないはずなのですが、色々エラー出て苦労したのでまとめておきます。

個々のコマンドの意味もできるだけ記載しました。
単なる環境構築だけでなく、DBコンテナのsequel proによる可視化やAPPコンテナでのbinding.pryの仕方、bundle install後にbuildし直さなくてもよい設定にする方法などもまとめました。

同じく既存のRailsアプリをDocker上で構築したい人の参考になれば幸いです。

内容について間違っていたら教えていただけると嬉しいです。

# 開発環境
– Ruby: 2.5.1
– Rails: 5.2.4
– MySQL: 5.6
– MacOS

# 前提
– Docker for Macはインストール済み
– Dockerについての基礎知識
– 今回は開発環境のみ

# 対象読者
作成した既存のアプリをDocker上で構築したい

元記事を表示

Rails Datetime型のカラムの値を日付(mm/dd/yyyy)単位で集計する方法

## はじめに
gem chatkickを使用して、値を日付(mm/dd/yyyy)ごとにカウントしようとした際に、ハマってしまったのでその備忘録になります。

##概要
やりたかったことは簡単グラフ表示 gem ‘charkick’を使用して、テーブルの値を日付単位でカウントして表示したかった。
ちなみに、charkick の一次情報は[こちら。](http://qiita.com “Qiita”)
また、charkickを使っての日付単位での集計には[gem ‘groupdate’](https://github.com/ankane/groupdate)を使うことがベストプラクティスらしい

##導入
以下の記事を参考にcharkickを導入しました
ー [Railsメモ(29) : Chartkickで簡単にグラフを描画する](https://wonderwall.hatenablog.com/entry/2015/08/22/225258)

##ここから本題
ぶつかった問題

エラー発生
ActiveRecord::Base.default_timezone must b

元記事を表示

2回目以降のAWSを無料で利用する方法(請求かからないようにインスタントの削除)

##Amazon EC2の無料条件
– 750時間/月 (t2.microインスタンスの使用もこれに含む)まで
– Amazon S3:
5GBの標準ストレージ、20,000件のGETリクエスト、2,000件のPUTリクエスト
– Elastic IPアドレス
実行中のインスタンスに関連づけられたElastic IPアドレスを1つだけ
インスタンスに紐付いていないElastic IPアドレスは全て課金対象
– IAM:
IAMユーザーの一時的なセキュリティ認証情報を使用して他のAWSサービスにアクセスするときのみ料金が発生

### 2回目以降で実施する場合
– Elastic IPアドレスを解放する
(すでに作成済みで、これ以上必要の無い場合)
– 紐付いているS3バケットを削除する
– インスタンスを削除する

## Elastic IPアドレスを解放する

Elastic IPアドレスは、停止しているインスタンスに関連づけられている場合に時間ごとに料金が発生します。そのため、インスタンスを停止するときにElastic IPアドレスを解放する必要があります。
### 手順

1.

元記事を表示

【翻訳】Bundler 3アップグレードガイド

## はじめに

Rubyのパッケージ管理ツールであるBundlerはバージョン 3で後方互換性が失われる様々な変更点が導入される予定になっています。
そして、バージョン 3への移行を容易にするため、バージョン 2.1ではバージョン 3で使えなくなる機能を使うと警告が出ます。

これらの内容については公式リポジトリのアップグレードガイドで詳細が説明されています。

https://github.com/rubygems/bundler/blob/master/UPGRADING.md

この記事は上記のアップグレードガイドの日本語訳です。

### 翻訳したアップグレードガイドの版について

この記事で翻訳したのは2019年10月3日に更新された以下の版です。
(翻訳時点のBundlerの最新バージョンは2.1.4)

https://github.com/rubygems/bundler/blob/e8f261882397f7e8a6c74760f8fe1a4955c9e980/UPGRADING.md

今後更新される可能性もあるため、必要に応じて最新の版を参照するようにしてくださ

元記事を表示

【Rails】config/localesに新規追加したファイルが読み込まれない【I18n】

# はじめに
タイトルの通りです。
Railsで多言語化対応をする際にconfig/localesにymlファイルを追加していくと思いますが、それが読み込まれない場合の対応策です。

# 結論
早速結論なのですが、超シンプルで、`Railsサーバを再起動する`です。。。
既存ファイルに訳文を追加する場合はRailsサーバの再起動は不要ですが、新規ファイルを追加した場合はRailsサーバの再起動が必要です。

ちなみに少しこの記事の内容と外れるかもしれませんが、RailsガイドにRailsの初期化プロセスについて記載があったので参考としてリンクを貼っておきます。
[Railsの初期化プロセス](https://railsguides.jp/initialization.html)

# おわりに
単純なミスで恥ずかしいのですが、めっちゃハマって辛かったので記事にしてみました。(typoやインデント、ディレクトリ構成等見直しまくりました。。。)
案外検索しても出てこず、他ごとしてたら急に「これ、サーバ再起動案件じゃね。。。?」と気が付いた次第です。はい。

元記事を表示

I understand #Ruby Lonely operator &. is a operator allows nil receiver method chains

If receiver is nil you can do method chains many times

“`rb
nil&.to_wow
# => nil
nil&.to_wow&.to_ya
# => nil
nil&.to_wow&.to_ya&.to_yes!
# => nil
“`

If not nil is reciever then you can not chain undefined method by lonely operator

“`rb
100&.to_wow
NoMethodError: undefined method `to_wow’ for 100:Integer
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2924

元記事を表示

index.html+mobile.haml なviewをrspecする

“`ruby
before_action do
request.variant = :mobile if ua.match(/Android/)
end
“`

とかするとviewを切り替えられる `ActionPack Variants` という機能[^1]で
view specを書く方法

“`ruby
# spec/views/users/index.html+mobile.haml_spec.rb

RSpec.describe ‘users/index.html+mobile.haml’, type: :view do
it do
render
end
end
“`

とやると 「`html+mobile` 何ていうフォーマットねーよ」 と怒られる
なので `render` の呼び出しで正しい情報を与える

“`ruby
# spec/views/users/index.html+mobile.haml_spec.rb

RSpec.describe ‘users/index.html+mobile.haml’, type: :view do

元記事を表示

テーブルの結合ができない。。Mysql2::Error: Column ‘updated_at’ in order clause is ambiguous

# はじめに
Railsでeager_loadしようとしたときに、下記のようなエラーが出て解消に時間がかかったのでまとめました。

“`
Mysql2::Error: Column ‘updated_at’ in order clause is ambiguous
“`

# やりたいこと
user の updated_at を指定した期間のものだけ抽出するために、テーブルの結合をしたい。

# なぜeager_loadできないのか

これを実行すると、

“`ruby:user.rb
User.where(“updated_at >= ‘2020/01/01’ and updated_at <= '2020/01/31'").eager_load(:post) ``` MySQLのエラーが出る。 ``` Mysql2::Error: Column 'updated_at' in order clause is ambiguous ``` なぜか。 updated_at は User にも Post にも存在しているため、どちらの updated_at なのか判別がつかな

元記事を表示

OTHERカテゴリの最新記事