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

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

Ruby slice!メソッド

# slice!メソッド
配列や文字列から指定した要素を削除し、削除したあとの要素を返します。
「 ! 」の付くメソッドは***破壊的メソッド***と言います。

## 破壊的メソッド
元の配列や文字列そのものを変化させてしまうメソッドのことを破壊的メソッドと言います。
ちなみに、調べてみると「 ! 」が付かない破壊的メソッドもあります。
勉強する必要がありますね!

## slice!メソッドの例

“`ruby
string = “おはようございます!”
string.slice!(2)
puts string
#=> “おはうございます!”
# 2番目の要素の「 よ 」が取り除かれて、返ってきた
“`

# slice!メソッドを使って任意の文字列を部分的に削除するプログラムの作成

条件は以下の通りです。
– 対象となる文字列からn番目の文字を削除すること
– 削除された文字以外の文字列を出力すること

“`ruby
def string(str, n)
str.slice!(n – 1)
puts str
end
# 以下は呼び出し例
string

元記事を表示

【備忘録】Ruby 2.7で RubyXLを使っているとFrozenError can’t modify frozen String: “” というエラーが出る

Ruby2.7のバージョンを2.7系に上げたときにRubyXLを使っているファイル内で“`FrozenError can’t modify frozen String: “”“`というエラーが出るようになりました。

#### 結論

rubyXLを3.4.11以上のバージョンに上げることで解消された。

#### 原因
調べてみるとrubyのバージョンを2.7にあげた時に、gemのバージョンが追いついておらず同じエラーが起きたという記事がありました。
Ruby2.7からnil.to_sがfrozen stringを返すようになったことが原因のようです。

以下のcommitで修正されたようなので、バージョン3.4.11以降であれば動くと思います。

https://github.com/weshatheleopard/rubyXL/commit/f0ed6a28dd4f5a1b39e64123be6dbfcdee439145

元記事を表示

[Rails]既存カラムのデフォルト値を変更する方法

# 前提
ユーザー(User)テーブルに管理者フラグ(admin_flag)があるとします。
今回はデフォルトをtrueからfalseに変更してみたいと思います。
*今回がboolean型を操作しますが数値/文字列でも同様に変更可能です。

“`
Table name: users

admin_flag :boolean default(TRUE)
“`

# 手順
## マイグレーションファイルを作成
デフォルト値変更のためのmigrationファイルを作成します。
今回はデフォルト値を変更するので
“`Change[カラム名]DefaltTo[テーブル名]“`
というマイグレーションファイル名にしています。

具体的には
“`rails g migration ChangeAdminFlagDefaultToUsers“`
でファイルを作成しました。

## マイグレーションファイルの中身を記述
実際に書くのは1行追加だけになります。
“`ruby
def change
# change_column_default :テーブル名, :カラム名, from:

元記事を表示

[Rails] タグ機能/タグ一覧ページの実装

# はじめに
タグ機能をgemを使わず、実装するための忘備録です。
設計は、中間テーブルを使うToxi法、といわれる形式で作成します。

# 実行環境
– 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/ffe07c55-d7d6-7846-7247-1ba43c8615c7.png)
articlesテーブルとtagsテーブルを多対多でつなげます。
こうすることで、tagの編集をしたいときに、それぞれのarticleを編集する必要がなくなります。

注意する点は、articlesテーブルとtagsテーブルは親子関係にはなっていないことです。
そのため、modelに dependent: :destroyとつけても articleの削除と同時に、tagは削除されません。
>構造を考えれば、当たり前なのですが、articleを削除してもtagが消えず

元記事を表示

AWS ECS のハンズオンを参考に Rails を ECS にデプロイする例

# 前提

前提としてECSの公式ハンズオンを完了しており、Hello Worldと表示されるWebアプリが動作したところまで進めていること

https://catalog.us-east-1.prod.workshops.aws/workshops/7ffc4ed9-d4b3-44dc-bade-676162b427cd/ja-JP/5-ecs/2-ecs

VPC/セキュリティグループ/ECSクラスタなどはそれぞれ作成できていること

# rails new でプロジェクトを作成する

localで作成

`rails new example`
`cd example`

# hostsの設定

development環境でデプロイさせる場合は、Railsアプリにアクセスできるようにhostsを編集する
(本来であればproduction環境でデプロイすべきだろうが、本記事ではRailsの起動が目的なので省略する)

`config/environments/development.rb`

“`rb
require “active_support/core_ext/int

元記事を表示

Ruby on Rails – local で RAILS_ENV=production でサーバーを起動してもつながらない場合 (コンソールにも何も表示されない)

# 解決

production環境では画面にもコンソールにもエラーが出力されていないのがデフォルトのようだ。これが理由だった。

環境変数を指定してコンソールにログを出力することで解決した。
これで単にルーティングエラーが起きていることが分かるようになった。

“`
RAILS_LOG_TO_STDOUT=1 RAILS_ENV=production rails server
“`

# コンソール出力の例

“`
RAILS_LOG_TO_STDOUT=1 RAILS_ENV=production rails server
=> Booting Puma
=> Rails 7.0.4.2 application starting in production
=> Run `bin/rails server –help` for more startup options
W, [2023-02-06T22:12:58.122114 #44354] WARN — : You are running SQLite in production, this is genera

元記事を表示

EC2へのdeploy時にmini_racerでエラー

Rubyのバージョンアップ対応でめちゃくちゃはまった・・・
今更ながらRuby2.5.1からひとまず2.7.7(bundler 2.4.6)へ(この後3.2.0にアップデート予定)

開発環境では順調に進むものの、capistranoを使ったdeployがまったくうまくいかない・・・
インフラ系に弱いのでまじで泣きそうだったー

とくにmini_racerとかlibv8-nodeとか、ちょっと調べるといろんな人がはまっているところに同じようにはまりました

“`
01 current directory:
01 /var/www/{appli}/shared/bundle/ruby/2.7.0/gems/mini_racer-0.6.3/ext/mini_racer_extension
01 make “DESTDIR=”
01 compiling mini_racer_extension.cc
01 linking shared-object mini_racer_extension.so
01 g++: エラ

元記事を表示

Rails5でAwesomeを使うときの注意

## 環境
– Rails5.2
– Awesome4、Awesome5

## はじめに
Rails5の環境でAwesome6を動かそうとしたところ、エラーが発生して、Railsが起動されなくなりました。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/0237251d-f7dd-ca0a-7d2e-d6d6cbd21086.png)

バージョンを落として、Awesome5(Awesome4でもOKです)で動かすと、正常にRailsが起動され、Awesomeのアイコンも表示できるようになりました。そのときの、トラブルシュート記事です。

## Awesomeの導入
Awesome4、または、Awesome5を使う場合、Gemfileに、Awesomeのgemを指定します。バージョンはしっかりと指定します。バージョンを指定しないと、最新のAwesome6がインストールされることになります。マイナーバージョンには、一番高いバージョンを指定しておいていいでしょう。
“`Gemfile

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事