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

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

RailsでIPベースでBasic認証をかける

社内システムでかつ、外部公開をする場合に社内なら認証なし+社外からは認証かけたい場合のIPベースでの解決方法

## RailsでのBasic認証
https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html
まずは公式参照

ほぼこの内容なので、条件をローカルネットワークなら認証必要に変える。
ちなみにこの公式の内容だと通常のログイン認証と併用できたりする。管理者アクセスとかに使えるかも。

“` application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception http_basic_authenticate_with name: "user", password: "pass" end ``` ## IPベースの判定 CIDRベースで指定したい。 `IPAddr`か`netaddr`でいけるみたい。今回

元記事を表示

parallel_tests が並列数を決定する仕組み

Rubyのテストは、素のままですと直列実行なので、テストケース数が増えると実行時間も増えていきます。

CIの実行環境は、マルチプロセッサを選択できることがあるため、テストも並列実行できると、時間短縮を狙うことができます。

Rubyでは parallel_tests というgem越しに、めぼしいテストフレームワークを並列実行することができます。

* https://github.com/grosser/parallel_tests

ところで `bin/parallel_test -n 4` のように並列数を指定すると4並列で動かしてくれますが、指定しなかった場合は、どうやら実行環境のプロセッサの数を、どこかから取ってきて動いているようです。README.md を眺めてもよくわからなかったので、ソースを読んでみました。

# 手元に持ってくる

この記事を書いてる時点の最新版 v3.1.0 を読んでみます。

* https://github.com/grosser/parallel_tests/releases/tag/v3.1.0
* https://github.com/gr

元記事を表示

renderメソッドとredirect_toの違い

**※この記事は私の勘違いが含まれています。正確な内容はコメント欄でご指摘頂いている通りです。**

 ツイッターのようなツイートアプリを作成中なのですが、表題の通りrenderとredirect_toの違いってなんや?
と思い私なりの結論が出たのでアウトプットのため、記事にしています。

#結論
– renderは同じコントローラー内のファイルしか基本読み込まないため、同じコントローラーのビューファイルを表示されることに向いている。
– redirect_toはurlを指定できるので、別のコントローラーのindexのビューファイルを表示させたい場合に向いている。

この結論に至った経緯は以下の通りです。
まずは以下のコードを見てください。

“`ruby:app/controllers/users_controller.rb
class UsersController < ApplicationController def edit end def update if current_user.update(user_params) redire

元記事を表示

マイグレーションファイルやテーブルの削除手順書

Railsを使い始めた頃に、マイグレーションファイルの扱いに苦戦していた時がありました。
手順や状態の確認もしないまま「いらないマイグレーションだから消してしまえ!」とか…

部分的なコマンドだけではなく、「実際の流れ」や「意図」を交えて書いていきます。
スクショも使ってあるので、見難かったらすみません…汗
`$` は入力しなくても大丈夫です!

# はじめにマイグレーションファイルの状態を確認します

プロジェクト内のターミナルで下記を実行

“`
$ rails db:migrate:status
“`
すると、現在実行されているマイグレーションファイルの状態が分かります。

※ 行いたい事:
一番下にある`Create text matelials`のマイグレーションファイルで作成したテーブルを削除してからマイグレーションファイルも削除したい時の説明です。

スクリーンショット 2020-07-27 20.49.05.pngアウトプット

# railsのアウトプット
## コントローラーのアクション
– index :一覧ページを表示をする
– new :新規投稿ページを表示する
– create :データ投稿を行う
– show :個別詳細ページを表示する
– edit : 編集ページを表示する
– update :データ編集を行う
– destroy :データを削除する

元記事を表示

Mysql2::Error::ConnectionErrorが出た場合

##localhost:3000で出たエラーを解決させました

自作アプリの開発中に起きたエラーを紹介します。

#環境
・macOS
・Rails 5.2.4.3
・Ruby 2.5.1

今日(投稿日)はエンゼルスの大谷投手が693日ぶりに登板と言う事で、めちゃくちゃテレビを見たい気持ちを抑えて、いつも通りの朝活を行う事に。。。

そして、自作アプリを開くとこんな画面に遭遇しました。
スクリーンショット 2020-07-27 7.32.29.png

へ?

何だこれは??

一瞬頭が真っ白になってしまいました。

なかなか自作アプリ開発が思う様に進まない中で、もはや自分でアプリを見ることすら出来ないのかと愕然。

5分くらい絶望した後に、取り敢えずエラーの解析から始めました。

#Can’t connect

元記事を表示

2020.7.27

“`ruby:qiita.rb
def greeting(&block)
puts “Hello”
block.call(“Goodbye”)
end

greeting do |text|
puts text
end

# ターミナル出力結果
# Hello
# Goodbye
“`

上記のコードの詳しい説明

“`ruby:qiita.rb
greeting do |text|
puts text
end
“`
まずは上記のコードが実行される。
上記のコードはgreetingというメソッドを実行し、その際に、下記のコードを引数としている。

“`ruby:qiita.rb
do |text|
puts text
end
“`
つまり、

“`ruby:qiita.rb

&block = do |text|
puts text
end
“`
となってる。
このとき、仮引数(今回はgreeting(&block)のblockのこと)に&(アンパサンド)を前置すると&blockとなり、これは「ブロック引数」となる。

元記事を表示

累乗、剰余の計算

ただの備忘録です。

累乗 3**2 3の2乗

剰余 7%3 2あまり1

関数使うなら n**s みたいな。

元記事を表示

Rails環境下でjqueryにて画面のバリデーションを設定する

### 背景
現在、自分が作成しているポートフォリオについて、データの更新、新規登録時にバリデーションをかけたい項目がある。個人的には、Vue.jsを学習中のため、こちらで実施したかったが、いろいろ試した結果について次のとおりにまとめる。

### 環境
| 項目 | 内容 |
|:—————–|:——————:|
| OS.Catalina | v10.15.4 |
| Ruby | v2.5.1 |
| Ruby On Rails | v5.2.4.3 |
| MySQL | v5.6 |

### 対応手順

【手順1】

元記事を表示

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使いたい)というものです。

# 修正(2020/07/27)
伊藤さんご本人からコメントいただき、`bootsnap gem`を追加する方法に変更いたしました。
詳しくはこの記事のコメントをご確認ください?‍♂️

# 環境
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

元記事を表示

OTHERカテゴリの最新記事