Rails関連のことを調べてみた2023年02月06日

Rails関連のことを調べてみた2023年02月06日
目次

Renderからメールが来たため翻訳してみた

# Renderからメールが来た
英文だったため、Googleの翻訳機能を利用してどんな内容だったか書き留めておこうと思います。

“`
Hi there,
Your free plan database, xxxx_production, has been suspended. Your database will be inaccessible unless you upgrade to a paid plan.
If you don’t wish to upgrade to a paid plan, your database and all backups will be deleted in 14 days, please make sure to backup your data prior to this.
You can read more about free plan databases in our docs.
If you have questions, feel free to reply to this email and we’ll get back

元記事を表示

Ruby インスタンスを生成してプログラムを作成

# インスタンスの生成を行ってプログラムをつくる

ターミナルで、以下のように出力されるようプログラムを作っていきます。

“`ruby
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
# ターミナル
“`

“`ruby
class Fruit

def self.fresh
puts “採れたて新鮮な果実です”
end

def initialize(name, price)
@name = name
@price = price
end

def introduce
puts “#{@name}は#{@price}円です”
end
end

apple = Fruit.new(“リンゴ”, 120)
orange = Fruit.new(“オレンジ”, 200)
strawberry = Fruit.new(“イチゴ”, 60)

Fruit.fresh
apple.introduce
orange.introduce
strawberry.i

元記事を表示

簡単!WSL2でRails6(Ruby3系)の環境を構築してVSCodeからrails newするまでのTips♪

# はじめに
こんにちは~~
本当は昨年の [DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor) :christmas_tree: の最終日に当日ギリギリで滑り込む予定でしたが、諸事情 ~~怠惰~~ があって2ヶ月経ってしまった @Keichan_15 が執筆する25日目最終日…そんな記事です(笑)今までの記事よりもボリューミーで濃い内容に仕上げました。温かい目で見てね:v:

最近受講生さん対応をしていると、Cloud9の調子が悪いんですよね~~ってお話をよく聞きます。どうやら東京リージョンのリソースが枯渇してるっぽい…?障害情報は過去分を漁っているのですが、ちと見当たらず…。軒並み東京リージョンで環境構築した方は頭を悩ませていることでしょう。

https://health.aws.amazon.com/health/status

そんなこんなの状態で `rails new` してCloud9で開発を始めると「重すぎてCloud9動かせませ

元記事を表示

モジュールバンドラとは

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

モジュールバンドラについて学んだことを書いていきます。

# 具体的な内容

# モジュールバンドラとは何か

複数のモジュールを一つにまとめて、依存関係を解決して、まとめるものを言います。

# モジュールバンドラで何ができるのか

複数のモジュールを一つにまとめることで、HTTPリクエスト回数を減らすことができます。
一度に処理できるリクエスト数に限りがあるため、回数を減らすことが表示速度の、パフォーマンスの観点で優れていると言えるからです。

## その他にできること

CSSにブラウザごとのprefixを付与する。

JavaScriptでモジュールのインポート。

パッケージマネージャーをnpmで一本化。

node.js のモジュールをブラウザ上で使う。
 →node.js 向けに作られたモジュールもインポートできる

# まとめ

JavaScriptの足りない部分を補う形で色々なツールが生まれたんだと知ることができ

元記事を表示

初学者によるubuntuでのRails + React で駅案内システム作り④~1:1、1:mで対応したモデルの登録更新、JSON出力~

# 前回までのまとめ
has_many throuのアソシエーションを設定できた! やったね!
あとはScaffold機能を使わなくてもCRUDを作ることが出来た。

# 記事一覧
– [初学者によるubuntuでのRails + React で駅案内システム作り①~下準備編~](https://qiita.com/Akane-Toribe/items/3366b054e9a0f287f401)
– [初学者によるubuntuでのRails + React で駅案内システム作り②~Rails+ReactでAPI通信編~](https://qiita.com/Akane-Toribe/items/604234a672ff3982b347)
– [初学者によるubuntuでのRails + React で駅案内システム作り③~Scaffold機能を使わずCRUD~](https://qiita.com/Akane-Toribe/items/fb345e5c59c7958b9e66)
– [初学者によるubuntuでのRails + React で駅案内システム作り④~1:1、1:mで対応し

元記事を表示

Active Storageを使った画像アップロード

# はじめに

Rails勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# Railsガイド

https://railsguides.jp/active_storage_overview.html#active-storage%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

# Railsでの画像アップロード

代表的な方法として下記2つのパターンがあるが、1について記載する。
Rails5.1までは`carrierwave`という`Gem`のインストールが一般的であったが、
Rails5.2以降は`Active storage`という便利機能が追加されたため、新たな`Gem`のインストールは不要となった。

1. `Active Storage`と`image_processing`を使用する
2. `carrierwave`と`mini_magic`を使用する

# Active Storageとは

元記事を表示

Ruby timesメソッドを使った繰り返し処理を行うプログラムを書く

# 繰り返し処理を行うプログラムの作成

– ユーザーに数字を入力してもらい、その数の回数だけHello world!と表示させるコードを記述します。

“`ruby
def output(num)
num.times do
puts “Hello world!”
end
end

puts “何回表示させますか?”
num = gets.to_i
output(num)
“`

## 解説

– メソッド外の部分
“`ruby
puts “何回表示させますか?”
num = gets.to_i
output(num)
“`
上記コードは、ファイルを実行したときにターミナルで出力される内容を書いています。
ユーザーに数字を入力させることで、「Hello world!」が何回表示されるのかを実行するためです。
getsメソッドで入力した値は、全て***文字列***で返します。
そのため、***.to_i***を付けて数値に変換させます。

– output(num)
ユーザーが入力した数値を、メソッド内で呼び出したいため、numという引数を使います。

– out

元記事を表示

Ruby on Rails初心者の学習記録 Part5:復習

# はじめに
Ruby on Rails初心者の学習記録Part5です。
今までRubyの基礎文法から始まり、RailsにおけるMVCやCRUDについて学んできました。
今回は、[“Getting Started with Rails”](https://guides.rubyonrails.org/getting_started.html) の [“8 Adding a Second Model”](https://guides.rubyonrails.org/getting_started.html#adding-a-second-model) を教材にコメント機能の実装を通して、今まで学んできたことを復習します。

# 1. モデルの作成
[Part2](https://qiita.com/Yasushi-Mo/items/5dfe81d39b5a153fe43c#2-%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)で記事データを扱うために作成した`Article`モデルのようにコメントデータを扱う`Comment`モ

元記事を表示

fly.ioリリースにて.envファイル内のAPIキーを適用させるには

普段はリリースコマンド打てば.envファイルに保存されているAPIキーが自動で適用されるのですが、何かしらの原因で適用されていなかった時の備忘録です。(開発OSはwindowsです)

# 結論
“`powershell:powershell
flyctl secrets set APIの名前=APIキー
“`
という感じで、`flyctl secrets set`の後にご自身の.envファイルに書いてある`APIの名前=APIキー`を打ち込めばオッケー
複数ある場合はスペースを空けて連続して打ち込むことも出来るようです。

# 参考
https://fly.io/docs/flyctl/secrets-set/

元記事を表示

【Rails】論理削除を実装しているモデルに対しては destroy を呼べないようにしたい

モデルに?のメソッド追加
“`
before_destroy :prevent_destroy
def prevent_destroy
raise “Destroy is not allowed for Article model. Because article model has a soft delete feature. Use discard function instead of destroy.”
end
“`

物理削除しようとするとこうなる?

“`
irb(main):001:0> Article.destroy_all
/app/models/article.rb:31:in `prevent_destroy’: Destroy is not allowed for Article model. Because article model has a soft delete feature. Use discard function instead of destroy. (RuntimeError)
“`

これで安心?

元記事を表示

【Rails×MySQL】utf8mb4対応でよく書かれている”encoding”と”charset”の、それぞれの役割について調べた→charsetが使われている場所が無かった

rails×MySQLについて、”rails utf8mb4″とかで検索すると、ほとんどの記事でdatabase.ymlにencodingとcharsetを両方書いています。

“`database.yml
# … 略
encoding: utf8mb4
charset: utf8mb4
# … 略
“`

encodingとcharsetは同じ値を設定していますが、それぞれの役割が分からないので、動作検証とソース確認をしてみました。

## 結論
・charsetはどこにも使われていない(ように見える)
・encodingはデータベースおよびシステム変数のcharset関連に適用される(結果としてテーブル・カラムも同様のcharsetになる)

## 検証環境
Rails: 7.0.4.2
MySQL: 8.0.32
mysql2: 0.5.5

## そもそもMySQLでCharset指定できる箇所
MySQLでCharset関連の指定ができる箇所は、以下の4つがあるかと思います。
1. データベース
(例:create database test_database

元記事を表示

Railway.appのメモリ使用量を減らすためにやったこと

Railway.appはherokuの代替として注目されたPaaSで(枕言葉)、自分もfly.ioのVMでは重くて難しい処理をRailway.appの方に任せるという方法で無償運用している。

やってるのは数時間に一回、Redisを伴ったSidekiq/schedulerのワーカーを回してるだけで、回してるワーカー自体の負荷は毎回数分ということもあって大した負荷はないのだが、Railsを回してるだけでも結構メモリを喰ってしまう。5ドルを超えると有償になってしまうというのもあるので、なるべくこのメモリ使用量を減らしたい。そんなわけでいろいろやったことをつらつら。

## MALLOC_ARENA_MAX=2
環境変数でMALLOC_ARENA_MAX = 2に指定しろというやつ。本当に意味があるかは正直不明。体感あるほど変わった印象はない。ちなみにherokuでは自動で2として設定されるらしい。

## Webなど不必要なviewやコントローラーなど全部destroyして消した
これはかなり効果があった。一応動作テストで作ってたviewなどがあったため、自分の場合はwebは全てfly.i

元記事を表示

【Rails/Heroku】「`write’: No such file or directory @ rb_sysopen – tmp/pids/server.」または、用意したのにYour app does not include a heroku.yml に陥った時

## やりたいこと
– GithubのRepoのmainブランチにマージされたら、Herokuにデプロイされて欲しい
– Docker上で動かしているので、ビルドなどもしてほしい

## 起こったことと対応
公式によると、heroku.ymlを用意する必要があるとのことだったので、サンプル通りに用意しました。

“`yaml:heroku.yml
build:
docker:
web: Dockerfile
run:
web: bundle exec puma -C config/puma.rb
“`

heroku.yml を使用して Docker イメージをビルドする | Heroku Dev Center
https://devcenter.heroku.com/ja/articles/build-docker-images-heroku-yml

これでOKと思ってデプロイしたところ、

“`
/usr/local/bundle/gems/puma-5.6.5/lib/puma/launcher.rb:259:in
`write’: No such f

元記事を表示

Dart Sass + cssbundling-rails から dartsass-rails に移行した

## はじめに

以前書いた記事で、 Webpacker から importmap-rails + Propshaft + cssbundling-rails への移行で実施したことを紹介した。

https://qiita.com/mishina2228/items/d4b9af22d0096ee451d7

このときは [Dart Sass](https://github.com/sass/dart-sass) を使っていたため、 Node.js が必要な状態だったが、 dartsass-rails はバイナリファイルをラップしているため、これを使えば `package.json` を使った JavaScript パッケージのバージョン管理や、肥大化する node_module ディレクトリから解放されるかも!と思い移行してみた。

https://github.com/rails/dartsass-rails

https://techracho.bpsinc.jp/hachi8833/2022_03_02/116014

**しかし、結論から言うと相変わらず Node.js は

元記事を表示

開発中のDeviseをインストールしてRails 7.0 (Hotwire/Turbo)のテストに協力する

## はじめに
Rails 7.0が2021年の暮れにリリースされて以降、Deviseは長らくRails 7.0(というか、Hotwire/Turbo)に完全対応していない状態が続いていました。ですが、ようやくDeviseのコミッタさんがRails 7.0対応に向けたプルリクエストを作ってくれました。

https://github.com/heartcombo/devise/pull/5548/

2023年2月4日現在、このプルリクエストの変更内容をテストしてくれるボランティアを募集しているようです。

もし、rails/ujsではなく、Hotwire/Turboを使っているRails 7.0にDeviseを組み込んでいる(もしくはこれから組み込もうとしている)人は、以下の手順に従って開発中のDeviseをテストしてみてください。

### 参考:僕もテストしてみた

ちなみに僕も動作確認用の簡単なRailsアプリを作って動作確認しました。

https://git

元記事を表示

Ruby if, else問題

# if文を使った条件分岐
以下の条件を満たすようプログラムを作成する。

– 条件1:第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること
– 条件2:第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
– 条件3:それ以外はFalseを出力すること

“`ruby
def in1to10(num, outside_mode)
if (num >= 1 && num <= 10) || outside_mode puts "True" else puts "False" end end # 呼び出し例 in1to10(5,false) in1to10(11,false) in1to10(11,true) ``` ```ruby True False True # ターミナル出力 ``` 複数の条件がある場合は、***論理演算子***を使って記述を行います。 ## 論理演算子とは 「真(true)」と「偽(false)」の確認を行う時に使われる演算子(記号)をのこと。 複数の条

元記事を表示

[Rails] コメント機能実装

# はじめに
コメント機能を実装するための忘備録です。
Userモデル、Articleモデル(Postモデルと同じ)は作成済みで行っています。
# 実行環境
– Rails 7.0.4.1
– Ruby 3.0.4
– Devise 4.8.1

# 実装
### 1. アソシエーション
![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118527/42b97f6f-d233-1379-c1f6-ceeef6e8826c.png)
articlesテーブルとcommentsテーブルを1対多でつなぎ、comment_contentのレコードを追加していくだけでコメントを残すことは出来そうですが、
今回は、***誰がコメントを追加したか***まで実装したいため、articlesテーブルだけでなく、usersテーブルもcommentsテーブルにつなげます。

この場合、usersテーブルとariticlesテーブルは***多対多***の関係になっており、commentsテーブルはそれを実現させ

元記事を表示

配列の正規化でArray()を使うな!

2023年2月某日、Twitterが氷河期になりTLが荒れ狂う最中、私は一つのコードに苛まされていた。
配列の正規化を行うため、以下のコードを実行したところ、

“`rb
fp = File.new(“hoge.mp4”)
Array(fp)

=> [“謎のデータ配列”] # [fp] が帰ってくる予定だった
“`

**は????????**

## 配列の正規化とは

配列またはObject、いずれかの値がやってくる場合に、
配列または[ Object ]、に変換しその後の処理を簡潔にするためのテクニックのこと

たとえば

“`rb
def hoge(file_or_files)
# ↓ ここが配列の正規化
files = file_or_files.is_a?(Array) ? file_or_files : [file_or_files]

files.each do |file|
# 個々のファイルに対して処理をする

end
end
“`

のように書くと、引数の形式をそこまで気にせずに良くなるってヤツ

自分が確認し

元記事を表示

バイトを表す

# 6.1 バイト
すべての数値は、以下のメソッドに応答します。

“`bytes“`
“`kilobytes“`
“`megabytes“`
“`gigabytes“`
“`terabytes“`
“`petabytes“`
“`exabytes“`
これらのメソッドは、対応するバイト数を返すときに1024の倍数を使います。

“`2.kilobytes“` # => 2048
“`3.megabytes“` # => 3145728
“`3.5.gigabytes“` # => 3758096384
“`-4.exabytes“` # => -4611686018427387904
これらのメソッドには単数形の別名もあります。

1.megabyte # => 1048576
定義はactive_support/core_ext/numeric/bytes.rbにあります。

# 出典
https://railsguides.jp/active_support_core_extensions.html#numeric%E3%8

元記事を表示

独自のバリデーションを定義する

# validate
### 説明
バリデーションを定義
### 使い方
“`rb
validate(バリデーションメソッド名.., ブロック引数)
“`
### 失敗したら例外発生
“`rb
validate!(バリデーションメソッド名.., ブロック引数)
“`

## 例
### バリデーションを定義
“`rb
validate :must_be_friends
“`

### ブロック
“`rb
validate do |comment|
comment.must_be_friends
end
“`
# 出典
https://railsdoc.com/validation#validate:~:text=%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3,GitHub

# 感想
種類のないバイデーションを作成することができる。
“`:バリデーションメソッド“`を指定できることが勉強になった。

元記事を表示

OTHERカテゴリの最新記事