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

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

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

元記事を表示

RailsアプリにPython3系の実行環境構築する

## まえおき
Railsを使ったプロジェクトにて大量レコードをエクセルに書き込む処理があるのだが、
使用していたRubyライブラリの「RubyXL」ではメモリ効率や出力速度に限界があり、「数十時間出力にかかる」、「出力する前にメモリ枯渇」するなどの問題があった。
Rubyには他にもエクセルのライブラリがあるが、書式設定などが自由にできないものが多く採用に至らず。
調査したところ現状の仕様を満たすかつ、メモリ効率が高いライブラリとしてPythonに「openpyXL」というものあったので導入した。
そこでRailsアプリ内でPythonを実行するための環境を用意する必要が出てきた。
なお単発的にRubyファイルからシェルスクリプトを経由してPythonファイルを実行する想定。
特にバージョン管理は必要ないのでPyenvは無し。

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

## 環境のチェックなど
①OSのバージョン確認
cat /etc/redhat-release
>CentOS Linux

元記事を表示

AWS – Capistranoを使ってデプロイした際のエラー奮闘記

こんにちは。
早く駆け出しエンジニアになりたい@iloveomeletteです。

標題にある通り、Capistranoを使ってデプロイした際に少々苦戦したので、
共有していこうと思います。
ポケモンのジム戦のようにエラーを解決するたび、またエラーに遭遇するということを繰り返してました。しょうもないエラーも紹介しつつ解決までの過程を書いていきます。
誰かの参考になれば幸いです。

尚、ご指摘箇所がございましたら
ご教授いただけますと幸いです。

それでは以下の目次でお送り致します。

| ラウンド | エラー項目 |
|:-:|:-:|
| 1 | VS 『supports platforms』 問題 |
| 2 | VS 『An error occurred while installing mysql2 (0.5.3)』 問題 |
| 3 | VS 『Mysql2::Error: Unknown database ‘アプリ名_production’』 問題 |

## 前提

それでは、まず環境などの前提部分からですね。

– macOS Monterey 12.3.1

元記事を表示

graphql-deviseのmount_graphql_devise_forの処理を追う

## これは何か

mount_graphql_devise_for の処理がブラックボックスでgraphql_deviseの理解が進まないため、理解を進めるために詳細な実装を追ったときのメモです。

## 前提

– [graphql-devise](https://github.com/graphql-devise/graphql_devise) v0.18.2
– まだ、マイナーバージョンのgemで内部の構造は結構な頻度で変わっている模様で、これは2022/04/27時点の情報です。
– 間違っている箇所などあるかもしれません。間違いありましたら、優しくご指摘いただけると嬉しいです。

## mount_graphql_devise_forの処理を追う

graphql-deviseで`bundle exec rails generate graphql_devise:install`を実行して`routes.rb`を見ると下記のコードが定義される。今回はこの処理が何をしているのかを追っていきたいと思います。

“`ruby:routes.rb
mount_graphql_de

元記事を表示

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

## まえおき
前回は[「計画編」](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のインスト

元記事を表示

Rails に Vue.js と Boostrap4 の導入忘備録 ①

## Vue.jsとは
“Vue.js“とは、“JavaScript“のフレームワークの1種。

JavaScriptのフレームワークやライブラリでで有名なのは“jQuery“があるが、“jQuery“はDOM操作を自分で行わなければならない。

DOM操作は、これまでブラウザで動作するアプリケーションの開発主体がサーバー側だった時はあまり問題にならなかったが、

最近はWebページ自体を遷移させずに1つのページ内で処理を完結させる“Single Page Application“など、フロントエンド側に開発主体が移りつつある。

そこで登場したのが、“Vue.js“や“Angular“、“React“などの“JavaScript“のフレームワーク。

これらフレームワークはDOM操作を自動化するなど、より効率よくフロントエンドの開発が行えるよう考慮されている。中でも“Vue.js“は比較的容易に使い始めることができるため、既存のアプリケーションへの組み込みなどにも向いている。

>**DOM操作とは**
DOMとは、Document Objec

元記事を表示

なぜ Rails の前段に Nginx を置くのか

以前、チームで以下のような会話が生まれました。

> 「コンテナに nginx 立てずに、直で rails Appサーバに ALB から流せばいいじゃん?」

みたいな話。その際に理由を即座にレスできなかったので、調査しました。

– puma や Unicorn はあくまでAppサーバなのでユーザ直アクセス用途として設計されていない
– バッファリング処理が弱い
– バッファリング処理(処理速度や処理にかかる時間の違いを調整すること)
– nginxから静的ファイルを配信するような構成も後からできる
– App側で静的ファイルの配布すると遅いが、CloudFrontを持ち出すまでもないような構成の場合など
– 本番環境では様々なアクセスを想定して nginx を前段において裁くことを想定すべき
– Webサーバのアクセスログは解析とかする際に都合が良い

的な理由が多いです。ALB とか WAF でも事前に裁くことができますが…

# 参考記事

– [EC2にRuby on Rails製のアプリケーションをデプロイする際におけるnginx等のWebサーバの必要性がわか

元記事を表示

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

元記事を表示

【Rails】マイグレーションコマンド

コマンド

「bundle exec rails」は「bin/rails」でもOK

# 新規モデル作成
“`
bundle exec rails g model モデル名 カラム名1:型 カラム名2:型
“`

例えば「nameというstringのカラムだけを持つuserモデル」を作成する場合↓
“`
bundle exec rails g model user name:string
“`
これだけで下記ファイルを自動生成してくれる
“`
create db/migrate/20220422143603_create_users.rb
create app/models/user.rb
create test/models/user_test.rb
create test/fixtures/users.yml
“`

気になるマイグレファイルの作成結果
“`db/migrate/20220422143603_create_users.rb
class CreateUsers < Activ

元記事を表示

【rails】image_tagで超簡単に画像を丸く(円形に)くり抜いて表示する方法

久々に、railsの`erb`を使う機会があり、画像を丸く(円形に)くり抜いて表示する要件があったので調べました。

左の画像を、アスペクト比を崩さずに右のように円形にくり抜いて表示したいです。


結論

“`erb
<%= image_tag "画像パス or URL", style: "border-radius: 50%; width: 200px; height: 200px; object-fit:cover;" %>
“`
※ `widt

元記事を表示

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

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

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

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

元記事を表示

7-8億レコードを加工処理してS3へ連携した話

## はじめに

今まで一般的なWeb開発はしてきたけど高速化についてあまり考慮せずに実装してきたエンジニアの方に向けて、筆者のデータ ( **7億-8億レコード** ) 加工処理高速化の経験を基に、本番実行で何を目指すかということと、それまでに実際にどのようなアプローチがあるのかを提案できればと思います。
あくまで提案なので、「こうしたらもっと高速になるよ」的な箇所は多々あるかと思います。
コメントなどでご指摘いただければ幸いです。

## 本記事における前提条件

本記事における前提条件を筆者の経験した環境を参考に記載します。

### 本プロジェクトの背景及び要件

– 既存サービスで蓄積されたデータを外部のシステムに連携して有用活用するにあたってのPoVを実施する。
– 既存サービスで蓄積されたデータの一部を匿名化 (ハッシュ化) したものをCSVに書き出し、外部のシステムにPOSTする。
– 本番実行までの実装及び検証は短期間 (2-4週間程度) である。
– **加工処理はできるだけ早く完了させる**

### 採用したテクノロジー

– Ruby on Rails API

元記事を表示

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”)の後ろは消して大丈夫

元記事を表示

【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の最新版をインストールするように指定している。
この環境だと、

元記事を表示

[Rails] PG::ConnectionBad: local user with ID 502 does not existが出た時の対処法

# はじめに
データベースで操作で`PG::ConnectionBad: local user with ID 502 does not exist`というエラーが発生した行った対処法を記事に残したいと思います。

# エラーの発生
以下のコマンドを実行した時に
“`console:コンソール
bundle exec rails db:migrate:status
“`
このようなエラー文が出ました
“`
=> Running via Spring preloader in process 74769
rake aborted!
ActiveRecord::ConnectionNotEstablished: local user with ID 502 does not exist
/Users/mouriyuka/runteq/pf/shere-lerning-video/vendor/bundle/ruby/3.0.0/gems/activerecord-
6.1.5/lib/active_record/connection_adapters/postgresql_adapt

元記事を表示

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)

元記事を表示

OTHERカテゴリの最新記事