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

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

【Railsチュートリアル】いいね機能の実装

#はじめに

Railsチュートリアル第6版sample_appにおいて、以下の様ないいね機能を実装していく。
![スクリーンショット 2021-11-28 3.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200191/c76e336e-19be-1c53-bf34-b3c5a4c9fcc1.png)
**前提**
第6版sample_appが完成している

#Favoriteモデル

Favoriteテーブルを追加

“`
$ rails g model Favorite user_id:integer micropost_id:integer
“`

user_idとmicropost_idにインデックスを追加し、組み合わせがユニークであるという複合キーインデックスも追加する。

“`rb:db/migrate/[timestamp]_create_favorites.rb
class CreateFavorites < ActiveRecord::Migration[6.1]

元記事を表示

Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築

## この記事の概要
– RailsのAPIモードで認証周り作ったときに苦労したので、備忘録メモとして…。

## 成果物
– GitHub: [try-rails6-api-with-devise](https://github.com/Nunnally-Engr/try-rails6-api-with-devise)

## 各種バージョン

– Ruby 2.7
– Rails 6.0.0
– mysql 5.7.21

## 前提条件

– Dockerを使える環境が整っていること

## できること

– Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築
– devise-token-authを使った、サインアップ、サインイン、サインアウトができる
– ユーザがサインインしていることを確認し、サインインしていたらuser情報を取得する

## できないこと(やらないこと)

– コピペで環境構築できるように作った記事なので、各項目の詳しい説明は割愛

## 環境構築

元記事を表示

【Ruby】早期return

##早期リターン
式の値を戻り値としてメソッドの実行を終了。式が省略された場合には nil を戻り値とする。
条件分岐のネストが深くなりすぎてコードを読みにくくなってしまうときに使用すると可読性が高まる。
「Guard Clause」「ガード節」「ガード条件」「ガード構文」と呼ばれることもある。

“`ruby
def invalid_permission?(user)
if user.present? #<= この例外処理はGuard Clauseで書き直せる case user.permission when 1,2,3 false else true end else true end end ``` ```ruby def invalid_permission?(user) return true if user.blank? #<= この1行で例外チェックをネストなしで完了できる case user.permission when 1,2,3 false else

元記事を表示

【Rails】global source linesとは何か

##global source lines 
Gemfileに記述されるgemに対してsource、git、pathのオプションを指定しなければ、Gemfileの一行目にある引数のサイトから取得される。

“`ruby
source “https://rubygems.org”
“`

このsourceメソッドの行はマニュアル内で global source lines と呼ばれる事がある。

###sourceオプション 
gemを検索するサイトを取得

“`ruby
gem “gem_name”, source: “url”

#全てのオプションで、ブロックを用いて一括で書ける
source ‘url’ do
gem ‘gem_name1’
gem ‘gem_name2’
end
“`

####pathオプション 
ファイルシステム内のパスを指定し、gemの取得先とする

“`ruby
gem “gem_name”, path: “url”
“`

###gitオプション 
作成されたgemのgitリポジトリから取得

“`ruby
gem “gem_nam

元記事を表示

EC2のメモリ空き容量が減る場合の対処法

## 困っている事
* 本番に公開しているAWSが、3日おきぐらいに再起動する
* なぜ本番が3日おきに再起動するのか分からない

## 環境
* auto scaling使用
* ロードバランサ使用
* rails(6.1)
* 起動はpuma
* EC2プラン: t2.micro

## 前提情報
* ログに、`OOMキラー`が作動したという記述あり。その後EC2インスタンスが落ちている
* `/etc/sysctl.conf`で、OOMキラーが作動した時に、EC2インスタンスが再起動するように設定している
* EC2インスタンスが再起動したタイミングでnginxとpumaが起動するcrontabを設定している
* EC2インスタンスは再起動するとメモリがリセットされる
* 約3日後にOOMキラーが作動する、の繰り返し
* サイトは1日に5000人ほどのuserが登録するというアプリ

## 予想
* メモリリーク
* メモリブロート(メモリ断片化)
* のどちらかではないか

## 検証
* メモリリークの特徴: メモリ消費量が徐々に線形に増加
* メモリ断片化の特徴:

元記事を表示

webpackerによるStimulusのインストールでハマったこと

# はじめに
皆さん`Stimulus`を使っていますか?
`React`や`Vue`を使う程学べていないけど、`jQuery`は使いたくないって人におすすめのフレームワークです!
`JaveScript`の簡単なDOM操作ができる人なら学習コストはほぼゼロで使えます!

更に、`Webpacker`を導入している`Rails`ならコマンド一発でインストールできるのも魅力的です。

“`bash:ターミナル
rails webpacker:install:stimulus
“`
上記コマンドでインストールして[公式サイト](https://stimulus.hotwired.dev/)でサクッと勉強しながら皆さん良いStimulusライフを!

、、、としたかったのですが、インストールの際にエラーが発生して上手く動かなかったので修正点を備忘録として残しておきます。

# 前提
| 技術など | バージョン等 |
| —- | —- |
| ruby | 2.7.4 |
| Rails | 6.1.4 |

> 執筆時点の日時は2021/11/27です。

元記事を表示

EC2に700万件insertする

## したい事
* EC2のmysql(RDS)にレコードを700万件入れたい
* できるだけ短時間で入れたい
* 1回で入れたい

## 環境
* docker-compose
* rails(6.1)
* localマシン: mbp 16GB
* EC2プラン: t3.small(メモリ2GB)、DBはRDS

## local 下準備

docker-compose.yml内容変更↓

“`
version: ‘3’
services:
db:
image: mysql:5.7.34
command: –max_allowed_packet=536870912
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports:
– “4306:3306”
web:
build: .
command: bash -c “rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b ‘

元記事を表示

NuxtとRailsで構築したアプリにローカルでスマホからアクセスする

# はじめに
NuxtとRails APIで開発してる時にスマホで動作確認したい時ありますよね。
わざわざステージング環境にデプロイして動作確認するのは一手間。
そこでローカルでスマホからアクセスして動作確認する方法をメモしておきます。
Dockerを使って環境構築しており、PCとスマホを同じWiFiに接続していることが前提です。
僕はMacとiPhoneを利用するので端末がこれらと異なる場合はご自身で対応してください。
# 注意事項
同じネットワークを利用している端末だったらアクセスできてしまうため、カフェなどFree Wi-Fiなどでは避けること。
# 設定していく

## 1.IPアドレスを確認する
システム環境設定→ネットワークを開きます。
すると以下の画像の青線のようにプライベートIPアドレスがわかるのでコピーしておきましょう。
この例では`192.168.11.9`です。
![スクリーンショット 2021-11-25 10.56.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63104

元記事を表示

コンピュータ特有の演算誤差

### この記事の執筆者
プログラミング学習を始めて、5ヶ月ほど。Vue.js Typescript Railsを学習中の大学生.

### きっかけ
Typescriptの参考書を学習中に下記のようなコードを書いたら予期しない結果になったため調べてみることにした。参考書には誤差が出る理由等は詳しく書かれていなかった。

“`js
let price = 12500
let tax = 1.1
let withTax = price * tax

console.log(“金額” + price )
console.log(`税込価格は、${withTax}`)
“`

結果

“`
金額12500
税込価格は、13750.000000000002
“`

上記のコードは定価である12,500円に対して税率である0.1を加えたものである。
期待していた結果としては下記のようなもの

12,500 * 1.1 = 13,750
****

### コンピューター特有の演算誤差

このような予期しない演算結果が出るのは、どうやら調べてみるとJavascriptだけではないようだ。

元記事を表示

【Rails】jbulderの基礎・使い方

ポートフォリオ制作でjbuilderを使ったので学習した内容をまとめました。

## jbuilderとは?
jbuilderとは、JSON形式のデータを簡単に作成することができるgem。Railにデフォルトで導入されている。

## jbuilderでできること
`app/view/〇〇.json.jbuilder`ファイル内のjsonオブジェクトに対して様々なメソッドを使うことでJSON形式の文字列のデータを簡単に作ることができる。

「APIを叩く」みたいなことができるのだと思います。(たぶん)
「APIを叩く」に関して、こちらの記事が大変参考になりました。

https://qiita.com/antk/items/d762fdb3695cb85712ad

## 使い方
RailsとVue.jsを使用、取得するデータは作成済みの想定で進めます。
### 1. Jbuilderが導入されていることを確認する

“`:Gemfile
ruby ‘2.7.3’
gem ‘rails’, ‘~> 6.1.4’
・・・
gem ‘jbuilder’, ‘~> 2.7’
“`

#

元記事を表示

railsチュートリアル第十三章 マイクロポストを作成する

###マイクロポストを作成する
####Micropostsコントローラのcreateアクション
app/controllers/microposts_controller.rb

“`rb
class MicropostsController < ApplicationController before_action :logged_in_user, only: [:create, :destroy] # create,destroyを行う前にログインを求めらえれる。 def create @micropost = current_user.microposts.build(micropost_params) # 慣習的に関連するモデルを生成するときは、buildを使う if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url # redirect_to は、view の表示には直接は関係なく、新たな Http

元記事を表示

railsチュートリアル第13章 マイクロポストを操作する

###マイクロポストを操作する
データモデリングとマイクロポスト表示テンプレートの両方が完成したので、次はWeb経由でそれらを作成するためのインターフェイスに取りかかりましょう。
#####インターフェース
IT関連では、二つのものが接続・接触する箇所や、両者の間で情報や信号などをやりとりするための手順や規約を定めたものを意味する

最後に、ユーザーがマイクロポストをWeb経由で破棄できるようにします。

####マイクロポストリソースのルーティング
config/routes.rb

“`rb
Rails.application.routes.draw do
.
.
.
# /users/1の有効にするため
resources :account_activations, only: [:edit]
# editアクションへの名前付きルートが必要になるため
# ルーティングのアカウント有効化
resources :password_resets, only: [:new, :create, :edit, :update]
# 新しいパスワードを再設定す

元記事を表示

railsチュートリアル第13章 プロフィール画面のマイクロポストをテストする

###プロフィール画面のマイクロポストをテストする
プロフィール画面で表示されるマイクロポストに対して、統合テストを書いていきます。

“`
ubuntu:~/environment/sample_app (user-microposts) $ rails generate integration_test users_profile
Running via Spring preloader in process 6991
invoke test_unit
create test/integration/users_profile_test.rb
“`

####生成されたマイクロポストfixture
test/fixtures/microposts.yml

“`yml
orange:
content: “I just ate an orange!”
created_at: <%= 10.minutes.ago %>
user: michael
# ユーザーfixtureにある対応ユーザーに関連付けることをRailsに指示できます

元記事を表示

M1でrails db:createが出来ない no suitable image found. Did find: (LoadError)諸々

M1でのrailsアプリ環境構築方法については[こちら](https://higukkublog.org/rails-m1/)でまとめています。

環境
rbenv 1.2.0
ruby 3.0.2
Bundler 2.2.32
yarn 1.22.17
DBはpostgresql

##rails db:createが出来ない問題
`rails db:create`をすると
![スクリーンショット 2021-11-26 21.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573515/35b2e33f-61d1-09f1-50eb-cb2109d0c1ee.png)
このようなエラーが大量発生してしまいました。

`no suitable image found. Did find: (LoadError)`とあります。
何かがないのでしょう。(かなり曖昧)

##対処法
“`
arch -arm64 gem install msgpack bootsnap bindex zeitw

元記事を表示

rails 個人的 初学者におすすめな記事

# はじめに
今回は僕がrails初学者の時に(いまでも)よく参考にしていた記事を紹介します。
ぜひrails初学者のみなさんも参考にしてください!超おすすめです!
では見ていきましょう!

# 用語やコードの意味を調べたい時
https://pikawaka.com/

こちらのサイトはプログラミングの用語をめちゃめちゃわかりやすく説明してくれています。

例えば、「`params`ってなんや?」「データを扱うメソッド(`where`とか`find`とか)ってどうやって使うの?てかそもそもなんやねん!」ってことありませんか?
そんな時にこのPikawakaさんではめちゃめちゃわかりやすく説明してくれています!

さらに調べたものの関連した内容も記載してくれている時もあるので必要としていた以上の知識が得られます!

# 特定の機能を調べたい時
https://techtechmedia.com/

こちらのサイトはrailsのいろいろな機能などに関してわかりやすく説明してくれています。もともとプログラミングの講師をやっていた方が作っているので非常にわかりやすいです。

例えば、「SNS

元記事を表示

rails Googlemapエラー集

# はじめに
こんにちは。
とあるスクールで長めにメンターやってたもんです。
プログラミングってほんのちょっとの間違いでエラーになっちゃうから初心者の人は辛いですよね〜
今回は生徒さんのwebアプリ開発でようでる、Mapがでない・うまく表示されない問題がよくあるので、今後のメンターさんや生徒さんがちょっとでも楽になりますように。

※注意:エラーやうまいこといかんのを自分で解決する楽しさは奪いたくないのでほんまに無理な時に見てください。
# 開発環境でのエラー
### 1.そもそも地図が表示されるはず部分のスペースがない
これはhtml・cssでのミスがあると考えられます。
例えば、
2. cssの書き忘れ
3. id名あるいはclass名とセレクタ名が一致していない

これらが多いかと思います。

### 2.マップを表示するためのスペースはあるがマップは表示されず空白になっている。
こちらすごく多いです。なので原因もたくさんあります。
考えられる限りの原因を記していきますね。
1. id名とgetElemmentByIdの名前が一致していない。
2. .envファイルへの記述が間違

元記事を表示

[Rails] AWS SESのSMTPサーバを使う大まかな流れとSandboxを解除したやりとりの記録

Deviseのパスワード発行メールのように、返信を気にしないメールをサクッと飛ばしたい時がままあるので記事にしました。

# Rails
## gem
gem ‘aws-sdk-rails’
## ActionMailer
“`ruby
# config/initializers/aws.rb

Aws::Rails.add_action_mailer_delivery_method(
:ses,
credentials: Aws::Credentials.new(ENV.fetch(‘AWS_ACCESS_KEY_ID’) { ‘AWS_ACCESS_KEY_ID’ },
ENV.fetch(‘AWS_SECRET_ACCESS_KEY’) { ‘AWS_SECRET_ACCESS_KEY’ }),
region: ‘ap-northeast-1’
)
“`
“`ruby
# config/environments/production.rb

config.action_mailer.deliver

元記事を表示

Railsのセットアップの時、mysql2というgemのせいでbundle installができない時に見る記事

## 概要
Rails + MySQLで開発環境を構築する際に発生しうるそこそこややこしいエラーについて、自分なりにまとめてみました。
**※Railsの中で、mysql2というgemを使用してます。**

## 発生したエラーについて
Railsのプロジェクトを“`rails new“`コマンドで作成後、bundle installした際に下記のエラーが発生することがある。

“`Bash
…省略

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

…省略

linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

G

元記事を表示

DBに保存できないデータを受け取るとき

DBに保存できないデータを受け取るとき(検索のパラメータなど)

“`モデル.rb
attr_accessor:
“`

を使えばいいらしい

元記事を表示

railsで作るURL(ルート)について[超基礎]

#ルータが作るURLは何者?

クライアントとサーバー間でデータ受け渡すために指定された道のり

#具体的に

“`
$ rails g model Users name:string
$ rails db:migrate
“`

“`
$rails g controller Post index create
“`
説明のために、UsersテーブルとPostコントローラを作りました

“`controller/posts_controller.rb
def index
user = User.all
end

def create
user = User.new
user.save
end
“`
とりあえず、Postsコントローラに簡単な処理を書きました。
超簡単に説明すると、

indexアクションでは、
UserテーブルのDBから、Userテーブルのデータをクライアントに返す処理

createアクションでは、
クライアントから受け取ったデータを、DBのUserテーブルに保存する処理
が書かれています

###ルートを作る

ようやくルート

元記事を表示

OTHERカテゴリの最新記事