Ruby関連のことを調べてみた2022年04月29日

Ruby関連のことを調べてみた2022年04月29日

EC2+Mysql8.0+Railsまでの構築の流れ

# 概要
EC2にMysql,Ruby,nginxを構築しELB,RDSとの連携まで行い完成を目指す。

#### 構築の際の環境
– Mac (M1 MacbookAir)
– OS : Amazon Linux2
– rbenv ver : 1.2.0
– Ruby ver : 3.1.2
– rails ver :
– mysql ver : 8.0.28

#### 前提準備 (作成済みなもの)
– VPC×1
– Subnet(public×2 , private×2)
– EC2×1
– RDS×1
– route table
– internet Gateway
– seculity group (EC2用)×1
– seculity group (RDS用)×1
– githubに新規リモートリポジトリ×1
– EC2へのssh接続設定済み
– GitHubのターミナルへのインストー設定済み

## 設定用ツールのインストール
Rails搭載JavaScriptのパッケージを管理するためのパッケージマネージャ
“`ruby:
$ sudo yum -y update

元記事を表示

Rubyのwp2txtライブラリを使えるようにする

# 背景
私はRubyをほぼ使ったことがありません。pだけでプリントができるということを知っているくらいです。
今回はpythonを使って自然言語処理をしようと思ったときにWikipediaの全文データ(xml)を取得してテキストファイルに変換する際にwp2txtというライブラリ?を使うためにインストールしました。

# エラーが起きる
機械学習の本を買ってその通りにやっていたところ
“`
[root@server ~]$ wp2txt –input-file ./jawiki-latest-pages-articles.xml
[DEPRECATION] This gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible.
/root/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/wp2txt-0.9.1/lib/wp2txt.rb:37:in `initialize’

元記事を表示

Rails PamaのDaemonaization設定

### 概要
EC2にnginxの構築を完了し、RailsのPamaデーモン化を構築した際の備忘録として。

### 環境
– Mac M1 macbookAir
– Rails 6.0.4.8
– ruby 2.6.5
– Bundler 1.17.2

### Gemfileに追記し、bundle installの実施
“`ruby:Gemfile
<省略> # Use Puma as the app server $ gem 'puma', '~> 5.0’                                  #5.0に変更
$ gem ‘puma-daemon’, require: false        #追記

<省略>

# bundle installの実施
$ bundle install –path vender/bundle
“`
### config/puma.rbに追記し、pumaを起動
“`ruby:Config/puma.rb
<省略>

require ‘puma/daemon’

元記事を表示

ローカルでDocker-rails環境を立ち上げる

## 背景

ふと時代に取り残されているような、周囲に置いていかれるような不安に駆られてしまいまして、コンテナをローカル環境で使い始めました。
デプロイする際の手間が減ること、コンテナを簡単に削除できることからRubyアプリケーションを作成する時は今後も使い続けていこうと思いました。
導入の際に実際に行ったことを手順に落として残しておこうと思います。

## 手順
①Dockerfile, docker-compose.yml, Gemfile, Gemfile.lockを作成します。

#### なぜDockerfileとdocker-compose.ymlを分けるのか?

– コンテナを分けるため管理がしやすい

– 実行コマンドが簡潔

といった理由で今回は分けて記述します。

Dockerfile
“`Dockerfile
FROM
ruby:2.5
RUN apt-get update -qq && \ #←ここの\が抜けているとエラーになる
apt-get install -y build-essential libpq-dev nodejs

元記事を表示

細かいつまずいたことをメモしておく(4月編)

# はじめに

今月は資格の勉強を開始したので、そこまでアウトプットするようなトラブルには遭遇しませんでした。
環境構築をする機会があったのでその内容が中心です。

# 問題
## VPNにつなげるとdocker-compose upでのインストールで止まる

これはDocker内部のネットワークとVPNの間で問題がおきることでインストールが遅くなってしまうのが原因っぽい
`wsl-vpnkit`というのをインストールすることで改善するようになった

https://github.com/sakai135/wsl-vpnkit

[ダウンロード](https://github.com/sakai135/wsl-vpnkit/releases/tag/v0.3.2)から最新のtar.gzを取得します。
そのあとPowerShellを開いて、ダウンロードした場所にディレクトリを移動して以下のコマンドを叩きます。

“`
# PowerShell

wsl –import wsl-vpnkit $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz –

元記事を表示

Google Ads APIバージョンの確認・アップグレード

# アップグレード通知は突然に
それは突然やってきました。
(メール引用)
![スクリーンショット 2022-04-28 13.50.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/32e8cce1-fd85-585c-1547-9889008866aa.png)

あ、アップグレードしなきゃ:neutral_face:
いや待てよ…そもそもバージョンの指定なんてした覚えがないのですが?

# APIの呼び出し環境
RoRで開発を進めているプロジェクトなので、もちろんAPIの呼び出しには公式のgemを使っています。
https://github.com/googleads/google-ads-ruby

# バージョン指定箇所の大捜索
プロジェクト内で指定している箇所を検索しました。
しかし、探せど探せど見つからない。
流石にconfigファイルにあるだろうと思ったけど見つからない。

# そうだGitHub上で探そう
こう思えるようになったのも自分の成長の証な気がしました。
G

元記事を表示

Firestoreでcollectionのfield名をcamelCaseとsnake_caseで交互に置換したい

# 問題

– Javascriptは通常camelCaseで書く
– Rubyは通常snake_caseで書く

そうするとFirestoreのcollectionのfieldはcamelCaseだけど、rubyにデータがある時はsnake_caseにしたい。

# 解決

Railsとしてここに置く

“`rb:config/initializers/firestore.rb
module FirestoreOliveBranch
module Outgoing
def create(data)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d
end

def set(data, merge: nil)
d = data.deep_transform_keys { |key| key.to_s.camelcase(:lower) }
super d, merge: merge
end
end

元記事を表示

プロジェクトへテストコードを導入する(環境構築編)

## まえおき
前回は[「計画編」](https://qiita.com/rerere_eng/items/fdf57b817589383db661 “”)という事でテスト導入にあたっての目的やテスト範囲の確認などを行った。
今回は「環境構築編」としてRSpecや各種gemのインストールについてまとめていく。


### 使用環境とGemについて


## 使用環境
– GCE
– OS:CentOS7
– 言語:Ruby(2.2.2)
– フレームワーク:Rails(4.2.5)


## 導入するGem
– rspec-rails(4.0.1)
Railsでrspecを実行するために必要

– factory_bot_rails(4.11.1)
テスト用のインスタンスを簡単に、効率よく作成できる

– capybara(2.18.0)
ブラウザをシミュレートしてテストするのに必要

– seleniumu-webdriver(3.141.0)
Webブラウザをプログラムから自動的に操作するためのツール、chromeなどを指定できる


## Gemのインスト

元記事を表示

N+1問題の重要性

N+1問題とは、アプリケーション開発でデータベースへのアクセス回数が多くなってしまう時に注意すべき問題である。
ユーザーが何かを投稿や検索した際にその都度データベースへアクセスしていては、パフォーマンスが下がってしまう。
そのような問題点を解決する際に活用されるのが、includesメソッドである。このメソッドを活用することで、引数に指定されたものが一度のアクセスで取得できるのでぜひ活用して、パフォーマンス維持を図りたいと思う。

元記事を表示

【Rails/minitest】パーシャルを出し分けるビューヘルパーの自動テストを書いてみる

# はじめに
こんにちは、この記事を書いている現在が夕方なので、お腹が減ってきてしまったk__mです。
この現場では、Railsのプログラムでビューヘルパーの自動テストが書かれていませんでした。
そこで今回、パーシャルを出し分けるヘルパーメソッドの自動テストを書こうとするものの、あまり参考になる記事も見つけられず、少し詰まってしまいました。。。
結局少しずるい方法で乗り越えてしまったのですが、備忘録代わりに記事を書いていきます。
# 自動テストの概要
今回自動テストを導入したかったのは、パーシャルの出し分けをする役割のビューヘルパーです。
具体的にはこんな感じです。

ApplicationControllerで定義されているインスタンス変数haraheriでパーシャルを出し分けるようにしています。
“`ruby:app/helpers/application_helper.rb
module ApplicationHelper
def render_partial
if @is_haraheri
render(partial: ‘shared/haraher

元記事を表示

Before Rails Tutorial ポケモン図鑑をつくろう

本投稿は講義資料であり、Rubyの基礎は理解しているが、rails tutorialで躓く読者を対象としています。
***
[1章:環境構築](https://qiita.com/earth660/items/a51874eba618e2aa5ce6)
[2章:Scaffold を用いた高速なアプリケーション構築 及び MVCの理解](https://qiita.com/earth660/items/c791f1e46875e8a9994e)

前章では、Scaffoldを用いて高速でアプリケーションを構築しました。
自動化された部分も多く、現段階では、大まかな理解をしていると思います。

今回は、route, Model, View, Controller をそれぞれ自分で作っていきます。
とはいっても、継承まで含めてすべて書くには理解することが膨大で大変ですので、
前回も使用した`generate` を今回も使用していきます。

まずは、Railsの新しいアプリケーションを作成します。
[2章:環境構築](https://qiita.com/earth660/items/c791f

元記事を表示

Rubyの基本的な知識(備忘録)

プログラム言語「Ruby」とは?
①入力する文字数が少ない。
②初心者でもわかりやすく、理解しやすい言語である。
③日本人により開発された言語であるため、日本語の情報が豊富に存在する。
④Ruby On Railsと言われる補助言語(フレームワーク)のようなものがあり、いろんな機能を素早く実装できる。
⑤スタートアップ等の企業で採用されることが多い。(とのこと。)

【主観】
個人的に他の言語「Python、Java」等の言語を調べたが確かに、Rubyの方が記述量は少なく理解しやすかった。

今後も学んだことを発信していきたいと思います。

元記事を表示

Railsに簡単な検索フォームを作ってみた(Ransack)

自分の作成している掲示板サイトに簡単な検索フォームを作りたいと考え、Ransackというgemを使い、記事を参考にしながら作成しました。

参考記事

Railsアプリに簡単に検索フォームを実装する方法とは?

環境とver
ruby ‘2.7.5’
rails ‘6.1.4’
Docker

github
https://github.com/takoyan33/railsdock4

まず最初に
“`Ruby:Gemfile
gem ‘ransack’
#ransackを追加
“`

“`Ruby:ターミナル
bundle install
#dockerの場合、docker-compose run web bundle install
“`
これでransackを入れることができました。
次にコントローラーに記述します。
自分の場合、kaminariのgemを入れているのと、降順に表示したいので、
色々後ろについています。
普通に追加する場合は、.page(params[:page]).per(8).all.order(id: “DESC”)の後ろは消して大丈夫

元記事を表示

何か作れるようになるまで

# あらすじ
ひょんなことからフロントエンドコーダーとしてインターンで採用され、WEBサイトをコーディングしてきたが、今一度立ち返って自分の能力を評価すると「HTMLとCSSしかちゃんとかけてないじゃん」となった。
将来は立派なエンジニアになりたい私はこの1年間で立派なポートフォリオを作って大学を卒業しようと心に決めた。。

# 技術選定
とりあえずRubyとReactを選びました。理由は特にないです。
なんでもいいからとりあえずプログラミングをできるようになりたいという理由だけなので、特に深く考えずに「プログラミング言語 おすすめ」で検索して無難そうなものを選んだ感じです。

# 今後の予定
各言語でキャッチアップを始めています
– Ruby
– まずはRubyだけで色々なものを作ってみる
– 目的としては、「基礎文法の理解」と「のちのフレームワークの理解を早めるために言語の仕様はしっかり理解しておく」
– Paizaとか使おうかな
– React
– チュートリアル
– 脳死で作れるようになる→PropsやStateの理解を完璧にする

元記事を表示

空白か先頭か(あるいは空白か文末)という正規表現

正規表現で少し詰まったので、記事としてアウトプットしておく。

Ruby 2.7.6で検証しています。

## やりたいこと

(空白か先頭)特定の文字列(空白か文末)という正規表現を書きたい。改行は入らないので考慮を今回はせず1行の文字列で考えます。
この正規表現を特定の文字列strに対して、`reg(str)`としましょう。

具体的には

“`ruby
> ‘ 大阪市’.match?(`reg(‘大阪市’)`)
=> true

> ‘ 大阪市’.match?(`reg(‘大阪’)`)
=> false

> ‘ 大阪 市’.match?(`reg(‘大阪’)`)
=> true
“`

のようなイメージ。純粋にinclude?関数を使うと、後者はtrueになってしまうので別途正規表現を作る必要が出てきました。

## こんな正規表現を書いた

“`ruby
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪市’}[\s|\z]/)
=> false
> ‘ 大阪市’.match?(/[\s|\A]#{‘大阪’}[\s|\z]/)
=> false
“`

通常の

元記事を表示

【Rails】Model名とControllerのModule名が重複してNoMethodErrorが発生した時の対応

備忘を兼ねて

## Moduleとモデル名が重複するとNoMethodErrorになる

ファイル構成

“`
app
├── controllers
│ └──user
│ └── hoges_controller.rb
└── models
└── users.rb
“`

“`rb:hoges_controller.rb
module User
class HogesController < User::ApplicationController def index User.where(id: ids) end ## その他メソッド省略 end end ``` ```:エラー内容 NoMethodError in User::HogesController#index undefined method `where' for User::Module ``` ## エラーの原因 モデル名とコントローラー側で定義したモデュール名が重複しており、`User

元記事を表示

railsで新規プロジェクトを作成する手順

備忘録。
railsで新規プロジェクトを作成する。

### ツール
– SourceTree

### 環境

“`
ruby -v
#=> ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

rials -v
#=> Rails 6.0.2.1
“`

### rails new

“`
rails _6.0.2.1_ new appname –database=postgresql –skip-bundle
“`

– `\_6.0.2.1_`
railsのバージョンの指定

– `appname`
アプリケーションの名前を記述する

– `–database=postgresql`
データベースの指定

– `–skip-bundle`
Gemfileを読み込まないようにする

:::note
「なぜGemfileを読み込まないようにするのか?」
Gemfileには、railsのバージョンに関する記述がある。その記述は、railsの最新版をインストールするように指定している。
この環境だと、

元記事を表示

Rubyでスマートに+09:00を出したかった

皆さんはアプリケーション開発中に、タイムゾーンを意識することはどれくらいあるでしょうか?

普段の開発だと、一度設定してしまえば中々意識しにくいものですが、たまたま今回こちらに関して触る機会があったので記事にすることにしました。

## 今回やりたかったこと
UTCからの時差を`+09:00`のような、`±xx:yy`(xxが時間、yyが分)の形式で取得することです。
というのも、Elasticsearchに時差を考慮した日程の絞り込み検索を行いたい、と考えていました。
Elasticsearchでcreated_atが2022年4月のドキュメントを探したい、という場合以下のような絞り込みを行います(下記はクエリの一部を抜粋)。

“`json
{“filter”:{“range”:{“created_at”:{“gte”:”2022-04-01″,”lt”:”2022-05-01″}}}
“`

しかし、これではタイムゾーンが何も配慮していないため、時間の絞り込みはUTC基準で行われ、日本時間だと9時間ずれてしまいます。
この場合、そもそもcreated_atを9時間ずらして入

元記事を表示

【Rails】レコードを配列の順番に並び替える

# 初めに

## 環境

Rails 7.0.2
Ruby 3.1.1

## やりたいこと

配列の順番にレコードを並び替える。

# 本文

通常 where に配列を渡して、レコードを取得すると id 順に並び替えられて取得されます。
ですが`in_order_of`を使用することで配列の順番に並び替えられます。

“`ruby
arr = [11,2,4,6,8,1]

users = User.where(id: arr)
# puts users.ids -> [1,2,4,6,8,11]

users = User.where(id: arr).in_order_of(:id ,arr)
# puts users.ids -> [11,2,4,6,8,1]
“`

ちなみに `Rails 7.0.0`になってから追加されたメソッドでデータベースが `Mysql` や `postgresql` でも関係なく動きます。

# 参考

[in_order_of – Rails ドキュメント](https://railsdoc.com/page/in_order_of)

元記事を表示

Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件

いつも通りRailsアプリをHerokuにデプロイしようとすると、以下のようなエラーが出た。

“`
>> git push heroku master
Enumerating objects: 67, done.
Counting objects: 100% (67/67), done.
Delta compression using up to 16 threads
Compressing objects: 100% (50/50), done.
Writing objects: 100% (54/54), 23.86 MiB | 311.00 KiB/s, done.
Total 54 (delta 17), reused 22 (delta 4), pack-reused 0
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504
send-pack: unexpected disconnect while reading sideband packet
fatal: the remo

元記事を表示

OTHERカテゴリの最新記事