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

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

デイリードリルアウトプット4

# TECH::CAMPでは毎朝問題が出題されます。気になったものを自分の勉強用として記録しています。

## Question
以下の仕様にしたがってコードを記述してください。

・Personクラスはプロパティ name, ageを持っている。
・StudentクラスはPersonクラスを継承している。
・Studentクラスにはintroduceメソッドが定義されている。実行すると
 「私の名前は◯◯です。◯歳です」と表示がされる。
・Studentクラスのインスタンスを作成し、introduceメソッドを実行する。

## Answer

“`ruby

class Person
def initialize(name, age)
@name = name
@age = age
end
end

class Student < Person def introduce puts "私の名前は#{@name}です。#{@age}歳です" end end yamada = Student.new("山田", 20) yamada.intr

元記事を表示

PumaやSidekiqでメモリが肥大する問題の対処法

RailsアプリケーションでPumaを使ったり、非同期処理のためにSidekiqを使うことはよくあると思います。
アプリケーションを長期運用しているとPumaやSidekiqのメモリ使用量が肥大しOOM Killerにプロセスを殺されたり。なんてことがよく起きます。

# 原因
メモリ使用量が肥大化する原因の一つとして、Rubyのメモリ管理とmallocの仕様(スレッド単位メモリアリーナ)によりメモリの断片化が発生していることが挙げられます。

メモリの断片化であって、メモリリークしているわけではありません。

## 解決策1. Puma Worker Killerを使う
Puma Worker KillerというGemがあります。
PumaのWorkerプロセスが設定したメモリを超えた時に自動でそのプロセスを殺して安全に再起動することでメモリの肥大を防ぎます。
**根本的な解決ではありませんが、環境をいじれない人にとってや有効かもしれません。**
ただPumaのみの解決であってSidekiqの解決にはなりません。

https://github.com/schneems/puma_w

元記事を表示

【Rails】画像の複数登録+プレビュー表示

メルカリのクローンサイト作成にあたり、商品出品ページを実装しました。
今回は、画像登録に関する備忘録です。

# ゴール
![Alt text](https://gyazo.com/898339aeaf5b35bc135f8494dce8f0cc/raw)

**・** 画像をDBに登録する前にプレビュー表示
**・** 画像は最大10枚まで登録可能
**・** 1〜5枚目までは上段、6〜10枚目までは下段に表示させる
**・** 画像は最低1枚以上登録しないと商品出品できない
**・** プレビュー画像を1枚ずつ削除
**・** DBに保存済み画像があればページアップロード時に表示させる

# 実装の考え方
– 画像を1枚アップロードするごとに、新たにinputタグとimgタグを生成
– プレビューとinputタグに同じ番号を振って管理する。
– プレビュー画像と削除ボタンをセットで実装し、削除ボタンをクリックしたら、その番号を持つinputタグを削除する
– DBに保存済み画像にも、削除ボタン、番号を振ったプレビューの表示を行う。

※imgタグの管理番号の整理方法 :

|属性

元記事を表示

ERROR! The server quit without updating PID file (/usr/local/var/mysql/mba.pid).の解決策

# バージョン

– Ruby 2.6.3
– Rails 6.0.2.2
– Homebrew 2.2.14
– MySQL 8.0.19

# mysql.server startをするとエラーが出る!

“`
$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/mba.pid).
“`

PIDファイル?がねえよ!
と怒られちまったぜ、へへへ

↓の記事を参考に進めてみる
https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc

PIDファイルをチェック↓
mbaのところは自分のパソコンの名前が入るよ
(僕はMacBookAirを使ってるので略してmbaにしてます。単純でしょ?)

“`
$ ls -la /usr/local/var/mysql/mba.local.pid
ls: /usr/local/var/mysql/mba.local.p

元記事を表示

【Rails 忘備録】devise_viewを編集しても反映されない問題

#はじめに
「Ruby on Rails」の「devise」を使ってユーザー新規登録/ログイン機能を実装する際、viewを編集しても一向に反映されない問題が発生しました。表示はされることからエラーでもなさそうなため追う術もありません。これを回避するために小技や、devise特有の注意点があることがわかったため、備忘録として残します。

#現象
deviseをインストールし、ビューを「rails g devise:views Model」で作成すると、以下のデフォルトのビューが表示されます。
私の場合は Model = devise で作成しました。
この状態からビューの編集を始めたのですが、どれだけ編集して、どれだけ対策を打ってもデフォルトのビューが表示されるというループにハマりました。

![d9640d67d8f66a838477e89051d5f715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516379/93dc63f5-36e0-27ee-1b22-0f1a22e858fa.png)

元記事を表示

タンパク質の立体構造をSketchUpでモデル化 その7【最終回】

#はじめに
PDB形式のタンパク質立体構造データをもとに、SketchUpを使ってタンパク質の立体モデルを作成するシリーズの最終回です。

[タンパク質の立体構造をSketchUpでモデル化 その1](https://qiita.com/yoho/items/1e15bbd4e3a7c4c7ff69)
[タンパク質の立体構造をSketchUpでモデル化 その2【アミノ酸の側鎖を描画】](https://qiita.com/yoho/items/05037dd8f128c77152d7)
[タンパク質の立体構造をSketchUpでモデル化 その3【アミノ酸の側鎖も含めて描画】](https://qiita.com/yoho/items/3c8e5eb48d68324cec60)
[タンパク質の立体構造をSketchUpでモデル化 その4【主鎖を立体に】](https://qiita.com/yoho/items/d5626464fd39903e0d51)
[タンパク質の立体構造をSketchUpでモデル化 その5【玉の描画】](https://qiita.com/yoho/items/c

元記事を表示

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.の解決策

# それぞれのバージョン

– Ruby 2.6.3
– Rails 6.0.2.2
– Homebrew 2.2.14
– MySQL 8.0.19

# bundle installでエラーが出る!

“`
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock –add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/……..

元記事を表示

Rubyの繰り返し処理について

# はじめに
よく使われるRubyの繰り返し処理や、個人的に便利そうだなと思うものをまとめていきます。

# Rubyの繰り返し処理

### each文
繰り返しの基本のeach文です。
Rubyでは、**for文を使わずにこのeach文を使うことが多いです。**
do ~ end までが**ブロック**と呼ばれ、要素をどう扱うかが記述されます。

“`ruby
numbers = [1,2,3,4]
sum = 0
numbers.each do |n|
sum += n
end
sum #=>10
“`

### do … end の省略
**do … endの代わりに { } で囲むことでもブロックを作ることが可能です。**
1行でコンパクトに書きたいときなどに使える方法です。

“`ruby
numbers = [1,2,3,4]
sum = 0
numbers.each { |n| sum += n }
sum #=>10
“`

###mapメソッド
各要素に対して、評価した結果を新しい配列にして返すことが出来ます。

“`ruby
numbers

元記事を表示

2020/05/06(水)Day5

#2020/05/06(水)Day5
##### RubyOnRailsを使ってブログアプリ作成
– マイグレーションファイルの差し戻し

“`terminal
$ rails db:rollback
“`

– Resourceメソッド
・Resourceメソッド使わない場合のCode

“`ruby
Rails.application.routes.draw do
get ‘posts’, to: ‘posts#index’
get ‘posts/new’, to: ‘posts#new’
post ‘posts’, to: ‘posts#create’
end
“`

– Resourceメソッド使った場合のCode

“`ruby
Rails.application.routes.draw do
root to: ‘posts#index’
resources :posts, only: [:index, :new, :create]
#only:[]でアクションを制限
end

Rails.application.routes.draw do

元記事を表示

【seed】rails db:seedで db/seeds.rb以外を読み込む場合

#問題
db/seeds/product_suggest.rbに配置してあるデータ

“`ruby
[
‘toothbrush’,
‘tooth paste’,
‘eye drops’,
‘water’,
‘tape’,
‘eraser’,
‘pencil’,
‘shirt’,
‘t-shirt’,
‘towel’,
].each do |keyword|
Product::Suggest.create!(keyword: keyword)
end
“`
こちらを、テーブルに読み込ませたいが、今まではdb/seeds.rbに記述したテータのみしか読み込ませた事がなかった。
この場合どのように設定するか検索し、対処した。

#検証環境
“`shell
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.3
BuildVersion: 19D76
“`
“`shell
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_

元記事を表示

Rails6のActionMailer機能をRSpecでテストする方法

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

私は現在、Railsを使用してメール送信機能を持つシステムを構築しているのですが、
Railsの持つActionMailer機能のRSpecでのテスト実装を少し調べたので紹介させて下さい。

記事の流れとしては、最初に利用環境とActionMailerを使うための下準備に触れ、
その後に実際のActionMailer側のコードとRSpecのコードを記載致します。

# 利用環境
Ruby 2.6.6
Rails 6.0.2
RSpec 3.9.1

# 下準備
今回は[mailgun](https://www.mailgun.com/)をESP(Email Service Provider)として、メール送信を行います。
そのため、mailgunで行った設定を`development.rb`に記載をして、rails側でmailgunを使用出来るように設定をします。
ActionMailerのRSpecテストだけ行う場合は本設定は不要ですが、メール送信機能を通常のアプリケーション側か

元記事を表示

OpenSSLをデフォルトのLibreSSLからOpenSSLに変更

[macOS High Sierra(OSX)のOpenSSLをデフォルトのLibreSSLからOpenSSLに変更する](https://qiita.com/moroi/items/53d60d1d6885795a0f6f)
[brew link openssl –forceができない問題](https://qiita.com/dasisyouyu/items/c9621c29b0fe79d2b7c4)
[gemのupdateがopensslのせいで通らない](https://www.takasay.com/entry/2014/11/22/080000)

元記事を表示

Twitter のツイートを埋め込む HTML を oEmbed API を用いて取得する

Twitter のつぶやきは、個々のつぶやきから手作業で埋め込みコードを取得することもできますが、API を使えば [oEmbed](https://oembed.com/) という埋め込み用フォーマットをツイート URL から取得することができます。

[Twitter の oEmbed API](https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-oembed)を使います。リンク先にサンプルレスポンスや色々付けれるクエリパラメータが載っています。

今回は [ruby-oembed](https://github.com/ruby-oembed/ruby-oembed) で取得しました。

“`sh
$ irb -rpp
irb(main):001:0> require ‘oembed’
=> true
irb(main):002:0> OEmbed::Providers.register(OEmbed::Providers::Twitter)
=> [#<

元記事を表示

三項演算子について

railsチュートリアルにやたらと出てくる、三項演算子についてまとめてみました。

***
“`
if @current_user.nil?
@current_user = User.find_by(id: session[:user_id])
else
@current_user
end
“`

上記のコードを三項演算子に書き換えると、

“`
@current_user = @current_user || User.find_by(id: session[:user_id])
“`

さらに書き換えると、

“`
@current_user ||= User.find_by(id: session[:user_id])
“`
||=の形なんだかみたことあるな〜と思ったら、コラムに以下の説明を見つけました。

“`
x = x + 1 -> x += 1
x = x * 3 -> x *= 3
x = x – 8 ->

元記事を表示

Rubyでハッシュ探索法を書いてみたMinitestでテストしてみた

##はしめに
今回はこちらの本でアルゴリズムの勉強をしているので学んだハッシュ探索法をRubyで書いて見ました。
[アルゴリズムをはじめよう](https://www.amazon.co.jp/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%82%92%E3%80%81%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-%E4%BC%8A%E8%97%A4-%E9%9D%99%E9%A6%99-ebook/dp/B01CZDTINE/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1IFTF2EOG9SW2&dchild=1&keywords=%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86&qid=1588756149&sprefix

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder ARC 086 C ハッシュのソート

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contest 086 C – Not so Diverse](https://atcoder.jp/contests/arc086/tasks/arc086_a)*
Difficulty: 431

今回のテーマ、ハッシュのソート
# Ruby
重複したリストと言えば、ハッシュですよね。

“`ruby.rb
n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
h = Hash.new(0)
a.each do |x|
h[x] += 1
end
puts n – h.values.sort.reverse[0, k].inject(:

元記事を表示

Raspberry Piで制御系Web UIを開発した記録

国を挙げてのリモートワークが推進されている昨今、シリアルポートを使った機器の制御が再び脚光を浴びています(私の脳内で)。そのような機器にRaspberry Piを接続してWeb UIを実装した記録です。

![震災の傷が残るIT31LとRaspberry Pi3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154669/b085544c-8799-b2e6-ee2b-9152728df3a8.jpeg) ![ボイスワープ当番自動設定システム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154669/4a2a1e49-08df-11c2-c9e5-a6c5dcd77921.png)

# 準備

必要な機材

* 制御対象の機器
* Raspberry Pi
* USBシリアルケーブル(FTDI社の製品が定番でしょうか)

## 開発環境の準備

開発に必要なソフトをインストールします。以下のような組み合わせを想定。

* Web U

元記事を表示

Rails コントローラのコンストラクタでは super を呼ぼう

Ruby では他の言語におけるクラスのコンストラクタにあたる処理を `initialize` メソッドとして定義します。([initialize のリファレンス](https://docs.ruby-lang.org/ja/latest/method/Object/i/initialize.html))

Rails では典型的なコントローラを ApplicationController の派生クラスとしてつくります。そのため、コントローラの初期化を `initialize` で実装すると基底クラスの `initialize` をオーバーライドすることになります。([ApplicationController のリファレンス](https://www.rubydoc.info/docs/rails/Rails/ApplicationController))

リファレンスにあるとおり、ApplicationController は

“`
Object
^
AbstractController::Base
^
ActionController::Metal
^
ActionContr

元記事を表示

子テーブルの値を where 絞り込み Rails

#where句で値の絞り込み
Railsで子テーブルのカラム名で where 絞り込みを行う方法です。

“`
User.joins(:posts).where(posts: {work_in_progress_flag: true})
“`

上記の様に、
where句内で、ハッシュ形式で記述することで
子テーブルの値で絞り込みを行う事が出来ます。

“`
where(子テーブル名: {カラム名: 値})
“`

#参考
>Railsガイド Active Record クエリインターフェイス
https://railsguides.jp/active_record_querying.html#%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%9D%A1%E4%BB%B6

Railsガイドは大事

元記事を表示

てすと

テスト

元記事を表示

OTHERカテゴリの最新記事