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

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

devise_token_auth ログアウトのテストコード実装時に苦戦したことをまとめる

devise_token_auth でログアウトのテストコード作成時、エラー解決の情報が少なかったのでまとめます。
※ user の新規登録、ログイン、ログアウト機能を実装しているものとします。
※ FactoryBot を導入してます。

## headers にログインに必要な情報が入っていないため、エラー発生

エラー発生時のコード

“`
describe “DELETE /v1/auth/user/sign_out” do
subject { delete(destroy_v1_user_session_path) }
context “トレーナーログアウト時” do
let(:user) { create(:user) }
it “トークンを無くし、ログアウトできる” do
subject
expect(response).to have_http_status(200)
end
end
end
“`

エラー内容

“`
Failure/Error: expect(response).to have_htt

元記事を表示

circleci 自動デプロイ 初心者が死にかけてできた

#circleciでやっと自動デプロイ設定ができたので、記録として投稿

##参考URL

[CircleCI]masterにマージされたらサーバーにSSHしてコードをデプロイする

##この投稿でできること
GitHubでmasterにmergeされたらEC2にSSHログインしてデプロイができるで

##事前確認
– EC2へSSHでログインが成功しといて。
– SSHは[こちらを]
(https://qiita.com/naoki_mochizuki/items/aea14a65a4a513e4816f)参考にさせていただいたべ。

– デプロイを行って、アプリケーションを公開できといて
– circleciで該当のプロジェクトを**「Add Projects」**できといて。

##まずは成功した設定ファイル!!!
“`ruby:.circleci/config.yml
version: 2.1
orbs:
ruby: circleci/ruby@0.1.2
jobs:
deploy:
machine:
enabled: true
step

元記事を表示

[Rails]find_eachが無限ループして本番環境のメモリを食いつぶした話

ActiveRecordにある便利メソッド`find_each`
実装の仕方が良くなくて無限ループしてしまい、本番環境でOOM killerによって強制停止させられるという事象が発生したのでその話について書きます。
※ この記事に登場するテーブルや実装などはすべて記事用にカスタマイズしています :bow:

# find_eachとは

find_eachは何をしてくれるかというと、大量のデータを一度に取得してループするのではなく決まった単位(デフォルト1,000件)ごとに取得してループしてくれます。
大量データを扱うときに一括で取得してしまうと大量のメモリを使っていしまうのですが、find_eachを使って分割して取得することで少ないメモリで処理することができます。

言葉で書いてもわかりづらいですね。下記が実行例です。

“`pry
# userが1万人いる場合
pry(main)> User.all.count
(1.1ms) SELECT COUNT(*) FROM `users`
=> 10000

# eachを使うと一括で1万件取得される
pry(main)>

元記事を表示

【rails】activehashについて

###Active Hashとは
ハッシュ形式の値をActive Recordと同じように操作できるようにするgem
Relationも貼れるので便利

###基本的な使い方
以下のような書き方ができる

“`ruby:app/models/plan.rb
class Plan < ActiveHash::Base self.data = [ {id: 1, name: "free"}, {id: 2, name: "silver"}, {id: 3, name: "gold"}, ] end class Plan < ActiveHash::Base self.data = [ {id => 1, name => “free”},
{id => 2, name => “silver”},
{id => 3, name => “gold”},
]
end

class Plan < ActiveHash::Base fields :name add id: 1, name: "free" add id: 2

元記事を表示

Railsアプリで画像の保存先をS3に変更する。その2

## はじめに
[前回の記事](https://qiita.com/ysda/items/49fa6e8318c874a57b9e)からの続きです。

## 安全にAWSのキーを扱えるようにする
AWSキーの漏洩を防ぐため、キーの内容は環境変数に設定します。
環境変数が分からない人はググって調べてみましょう!

## AWSのキーの設定
carrierwave.rbのなかに[:access_key_id]や[:secret_access_key]といった記載がありました。
ここには予め設定したキーが入り、Rails5.2では「credentials.yml.enc」というファイルで管理されます。

それではcredentials.yml.encをエディタで開いてみましょう。
以下のように暗号化された文字列が表示されると思います。
![スクリーンショット 2020-07-26 23.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429077/ab3cebe2-4098-b91b-c917-

元記事を表示

【Ruby】シンプルなPingクライアントを作ってみた

# 概要
ICMP Echo Requestの送信・受信を1回だけ実行するシンプルなクライアントを作ってみたので、忘れないうちに実装時に学習したことや、気をつけたこと等をつらつらとメモ。

### 成果物リンク
https://rubygems.org/gems/simple_ping
https://github.com/kuredev/simple_ping

## 目的
– ネットワークプログラミングの練習
– gem パッケージ公開の練習
– 気晴らし

# どんなものか/使い方

### できること
– ping(ICMP)した結果の成否をtrue/falseで返却する
– 宛先の指定はIPアドレス

### できないこと
– FQDNでの宛先指定
– リトライ
– 送信データのカスタマイズ(ID指定やデータ部の指定等)
– 等など

## 使い方サンプル

“`ruby:ping.rb
require “simple_ping”

ping_client = SimplePing::Client.new(src_ip_addr: “192.168.1.100”)
puts

元記事を表示

[備忘録] CircleCI / Ruby(公式doc.の最小構成)について各設定項目の概要と参照先リンク

# はじめに

[Language Guide: Ruby – CircleCI](https://circleci.com/docs/2.0/language-ruby/)にて、設定ファイルの各項目について調べた備忘録メモです。
解釈した範囲で短い説明を試みましたが、全体的として参照先のリンク集に近い形になりました。

## 本投稿の目的
– “/.circleci/config.yml“の構造の把握
– 類似の調査の効率化準備
– 投稿の経験値

# 本編

各所で下記のリファレンスの該当タグへのリンクを貼っています。
**各設定項目のリファレンス**
 [CircleCI を設定する – CircleCI](https://circleci.com/docs/ja/2.0/configuration-reference)

## [/.circleci/config.yml](https://circleci.com/docs/2.0/language-ruby/#sample-configuration)

~~~yml:/.circleci/config.yml
vers

元記事を表示

[Rails]Railsのバージョンを5.0→5.2に上げてみた

# やりたいこと
Rails5.0系からRails5.2系にバージョンを上げたい。(Rails5.2から使えるようになった[Active Storage](https://railsguides.jp/active_storage_overview.html)を使いたかった。)

この記事の趣旨は、**Rails5.0系からRails5.2系にバージョンを上げるために必要な手順**と**その際に発生したエラー対応**をご紹介したい(そしてActive Storage使いたい)というものです。

# 環境
Ruby 2.5.1
Rails 5.0.7.2

# 手順
伊藤さんのQiita記事を大いに参考にさせていただきました。
[永久保存版!?伊藤さん式・Railsアプリのアップグレード手順](https://qiita.com/jnchito/items/0ee47108972a0e302caf)

基本的には伊藤さんの記事を見ていただくのがわかりやすいです(本末転倒)。
ただ、「とりあえず早いとこバージョン上げたい!!」という方も少なからずいらっしゃるかと思うので、邪道的な形で見てい

元記事を表示

Gitに管理されたファイルを削除したい

.gitignoreに書き忘れてcommitしてしまった時に、
「.gitignoreに追記すれば大丈夫…」
と誤解していませんか?
僕のように..汗

後から.gitignoreに追記するだけではすでにGitに管理されたファイルは除去されないので、そんな時の対処方法を書いておきます。

# Gitに管理されたファイルを残して除外したい場合
“`
$ git rm –cached [除外したいファイル名]
“`
その後は必ず`.gitignore`に除外したいファイルを追記する。
注意箇所:
`–cached`を必ずつける!!
つけないとファイルごと削除してしまいます。

# ファイルごと削除したい場合
“`
$ git rm [削除したいファイル名]
“`

# ディレクトリごと削除したい場合
“`
$ git rm -r [削除したいディレクトリ]
“`

# 最後に
Gitを使い始めた時に何回か忘れてcommitして、都度調べていたので備忘録として残しておきます。

同じ境遇になった方のお役に立てば嬉しいです。

元記事を表示

Active Storageで複数画像の投稿・削除

#環境
Ruby 2.5.1
Rails 5.2.4.3

#やりたい事
Rails標準のファイル管理機能Active Storageを使い、画像を複数を投稿・削除できる機能を実装したい。

###まずアプリを作成
“`
$ rails new sample_app
$ cd sample_app
$ bin/rails db:create
“`

別ターミナルで

“`
$ bin/rails s
“`
http://localhost:3000 にアクセスして馴染みの画像が出ていればOK。

スクリーンショット 2020-07-26 21.55.06.png

###modelとcontrollerを作成
今回はpostという名前で。

“`
$ bin/rails g model post

元記事を表示

【スクレイピングまとめ】| Python Node.js PHP Ruby Go VBA | 6種類の言語でヤフートップをスクレイピング

## Python

### 動画
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/f7g302P0Ins/0.jpg)](http://www.youtube.com/watch?v=f7g302P0Ins)

### リポジトリ
https://github.com/yuzuru-program/scraping-python-yahoo

### ソース
“`index.py
import urllib.request as request
from bs4 import BeautifulSoup

req = request.Request(
“https://www.yahoo.co.jp”,
None,
{}
)

instance = request.urlopen(req)
soup = BeautifulSoup(instance, “html.parser”)

li = soup.select(‘main article section ul’)[0].select(‘li’)

fo

元記事を表示

【ポートフォリオ を作成される方へ】Dockerでbinding.pryを使う方法

ポートフォリオを作成中、dockerとCircleCIを使ってHerokuにデプロイするために[こちらの記事](https://qiita.com/gakinchoy7/items/ae31107ef56efb16fe7e)を参考に作っていました。
そこにbinding.pryを使いたいと思った時の導入の方法をお伝えしようと思います。

“`docker-compose.yml
version: ‘3’
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
– “4306:3306”

web:
build: .
command: rails s -p 3000 -b ‘0.0.0.0’
environment:
RAILS_ENV: development
volumes:
– .:/sample_app #自

元記事を表示

post to Qiita patching version

# すでにqiitaにあげた記事を更新するversion

– [post to Qiita api v2 (from org-file of emacs)](https://qiita.com/daddygongon/items/ad0a8bb5900955ad344e)

に最初に投稿するversionの作成記録があります.さらに,すでにqiitaにあげた記事を更新するversionです.下のcodeを

ruby post_final.rb post_final.org

なんかでできます.最初のpostでは新しいのを作り,そのあとitemsのidをorgに記します.それがあるとそのidにpatchします.

さらに,’open’, ‘teams’を選べます.defaultは’private’.

ruby post_final.rb post_final.org teams

なんてね.

keyは

– [Org-modeからQiita準拠のMarkdownをexportするパッケージを作ってみました](https://qiita.com/0x6

元記事を表示

タスク管理 アプリケーション作成手順

#1. アプリケーション作成準備

##1-1. 作成するアプリケーションの内容を考える

| 機能     | 機能内容 |
|:—————–|:——————|
| 一覧表示    |全てのタスクを一覧表示する |
| 詳細表示      |一つのタスクの詳細内容を表示する |
| 新規登録      |新しいタスクをdbに登録する |
| 編集        |登録済みのタスクを編集し、dbを更新する |
| 削除        |登録済みのタスクをdbから削除 |

##1-2. アプリケーション名を決め、雛形を作成

“`command
rails new アプリケーション名 [オプション]

#例)

rails new taskmanage -d postgresql
“`

##1-3. dbを作成する
アプリケーションを作成したディレクトリに移動しdbを作成する

“`command
rails db:create
“`

##1-4. サーバーを起動してみる
以下のコ

元記事を表示

【Mac】「Docker」で「Ruby on Rails 6」「React」と「MySQL 8」で環境構築(CRUDのサンプル付)

# ■ はじめに
SESエンジニアとして、PHPをメインに参画し、現在はJava案件に参画しているTatsuyaです。
そしてこの度転職が決まりまして、9月から新しい職場に!!!!
楽しみもある反面、実は不安要素が。。。

それは、、、
**次の職場は!!Ruby on Rails!!やったことない!!**

> 僕「学習しないと転職した瞬間からお荷物確定ダァー」

と焦り散らかし始めて、先日からRuby on Railsの学習に励み始めたわけなのですが。。。

> 僕「Rubyの公式チュートリアルめちゃくちゃ大変すぎないか!?さらにHerokuとかも使うの!?結構大掛かり!?」

というので、実は挫折しちゃいました。。。
挫折理由としては、チュートリアル自体が骨太ということもありますが、 **Dockerを使った環境構築** も重なって折れちゃいました。~~(最弱)~~

僕は、直接自分のMacにRuby環境は作りたくなかったんで、なんとしてでもDockerでローカル環境を整えたかったのです。~~(次の職場でもDocker使うみたいですしお寿司)~~

ということで、先人の方々が丁寧

元記事を表示

【ポートフォリオ を作成される方へ】ransackで作る検索機能

##ransackとは
検索機能を少ないコードで簡単に実装できるgemです。
設定も簡単でできることもたくさんあります。
##導入方法

“`ruby:Gemfile
gem ‘ransack’
“`
“`
$ bundle install
“`

##使い方
①検索パラメーターは “:q”
②Ransack版form_forは”search_form_for”
③検索結果は”resultメソッド”で取得できる

“`controller.rb
class ProductsController < ApplicationController def index @q = Product.ransack(params[:q]) @products = @q.result(distinct: true) end end ``` ```view.html.erb <%= search_form_for @q do |f| %>
# nameカラムに対して部分一致検索ができる
<%= f.label :name_cont, "商品名を含む" %>

元記事を表示

[Ruby] 標準入力を受け付ける際に ^H などの ASCII 制御文字を意図した通りに認識させる

# 結論
**`STDIN.gets` ではなく `Readline.readline` を使おう**

# STDIN.gets
Ruby で標準入力を受け取る方法を調べると、多くの場合、以下の実装方法が出てきます。

“`ruby:stdin.rb
print ‘> ‘
text = STDIN.gets.strip
puts “You said #{text}!”
“`

“`bash
$ ruby stdin.rb
> hello
You said hello!
“`

`gets` の他にも `read` や `readline`、`readlines` があるようです。
[Ruby 標準入力から複数行読み取りたい](https://nnnamani.hateblo.jp/entry/2016/08/14/150900)

## 欠点
しかし、上記の方法だと ASCII 制御文字を意図した挙動で認識させることができません。

“`bash
$ ruby stdin.rb
> hello^H^H^H
You said he!lo
“`

上記の例では、`hello`

元記事を表示

ランキング機能のつくりかた【Railsの内部結合と外部結合を理解する】

#概要
この記事は、実際に私が[BooQs](https://www.booqs.net/)で運用している「ランキング機能」を例にして、Railsのテーブル結合(内部結合と外部結合)を解説する記事です。

#前提条件

Rails 5.1

#【?‍♂️Before】テーブル結合を使わないランキング機能

私が開発しているBooQsという英単語学習サービスでは、ゲーミフィケーションを用いてユーザーの学習意欲を高めるために、英単語の解答数(userのもつanswer_historiesの数)によるユーザーのランキング機能を実装しています。

スクリーンショット 2020-07-25 12.00.25.png

しかし、以下のNewrelicのダッシュボードを見ていただくとわかるように、自分の書いたランキング機能

元記事を表示

メソッドや定数を使った出力 学習メモ

学習メモです。

### そのまま出力

“`
puts “うにが好物です!”
“`

### メソッドを使って出力

“`
class Favorite
def self.food
puts “うにが好物です!”
end
end

Favorite.food
“`

### 定数を使って出力

“`
FAVORITE = “うにが好物です!”

puts FAVORITE

“`

元記事を表示

post to Qiita patching version

# すでにqiitaにあげた記事を更新するversion

– [post to Qiita api v2 (from org-file of emacs)](https://qiita.com/daddygongon/items/4333d0978b1c84336b1a)

に最初に投稿するversionの作成記録があります.さらに,すでにqiitaにあげた記事を更新するversionです.下のcodeを

ruby post_final.rb post_final.org

なんかでできます.最初のpostでは新しいのを作り,そのあとitemsのidをorgに記します.それがあるとそのidにpatchします.

さらに,’open’, ‘teams’を選べます.defaultは’private’.

ruby post_final.rb post_final.org teams

なんてね.

keyは

– [Org-modeからQiita準拠のMarkdownをexportするパッケージを作ってみました](https://qiita.com/0x6

元記事を表示

OTHERカテゴリの最新記事