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

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

Herokuにデプロイ → エラーメッセージ[ syntax error near unexpected token `(‘ ]

# 概要
Herokuにデプロイしようとしたところ、 syntax error near unexpected token `(‘
と表示され先へ進めなかった。

# 目次
– [環境](#環境)
– [修正前](#修正前)
– [対策](#対策)
– [修正後](#修正後)
– [おわりに](#おわりに)

# 環境
Ruby 3.1.2
Rails 7.0.3
Heroku 7.60.2

# 修正前

“`bin/rails
#frozen_string_literal: true
#!/usr/bin/env ruby
APP_PATH=File.expand_path(‘../config/application’,__dir__)
require_relative ‘../config/boot’
require ‘rails/commands
“`
この状態でデプロイしました。が...
“`エラー画面
bin/rails syntax error near unexpected token `(‘
`APP_PATH = File.expand_pa

元記事を表示

Ruby 配列を検索して置き換えまたは削除

# 方法
[1] 文字列”hoge”を”hogehoge”に置き換える
“`ruby
array = [“huga”,”hoga”,”hoge”]

# arrayから”hoge”を検索して”hogehoge”で置換
array.map!{|x| x==”hoge” ? “hogehoge” : x}

p array
# 出力結果=> [“huga”,”hoga”,”hogehoge”]
“`
[2] 文字列”hoge”を”hogehoge”に置き換える(非推奨)
“`ruby
array = [“huga”,”hoga”,”hoge”]

# arrayから”hoge”を検索して”hogehoge”で変換
array[array.index(“hoge”)] = “hogehoge”

puts array
# 出力結果=> [“huga”,”hoga”,”hogehoge”]
“`
こちらの方法は検索する文字列がない場合このようなエラーが出る。
![10272050481bd11c4015d899de61beda.png](https://qiita-image-stor

元記事を表示

HTMLの基礎知識(新規投稿:星評価平均)

Step1:詳細ページの平均(Controller)
自分は2つのカラムしか追加していないので、自分のカラム数に合わせてコントローラーを編集

![スクリーンショット (71).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/f26fff0a-6a63-f453-b20d-75f435d1c582.png)

“`ruby:controller.rb
def show
@register = Register.find(params[:id])
/追加部分
@regi=@register.overall
@regi2=@register.level
@total=@regi+@regi2
@to=@total/2
/ここまで
end
“`

Step2:詳細ページの平均(View)

“`ruby:show.html.erb

平均:
【Rails】投稿一覧ページをユーザー毎に表示させたい

#### 前提
・Rails6
・Devise導入済
・投稿機能を一通り実装済

#### やりたいこと

・ユーザー毎の投稿一覧ページを作成したい
・ログインしていないユーザーも閲覧可能
・URLは下記のようにしたい
`http://localhost.3000/users/user_id/posts`

“`ruby:routes.rb
resources :users do
resources :posts, only: [:index]
end
“`

ルーティングを確認すると下記のようになります
“`
user_posts_path GET /users/:user_id/posts(.:format) posts#index
“`

URLから送ったidを取得するためコントローラーを修正します。
“`ruby:posts_contoller.rb
def index
@user = User.find(params[:user_id])
@posts = @user.posts.order(created_at: :desc)

元記事を表示

Rails のコールバックに ActiveSupport::Subscriber を使用する

# この記事は?

– Rails のコールバックに [ActiveSupport::Subscriber](https://api.rubyonrails.org/classes/ActiveSupport/Subscriber.html) を使用する方法を記載します。
– この方法により以下のメリットがあります。
– コールバックの呼び出し元と呼び出し先をより疎結合にすることができる。
– 単体テスト時などコールバックの処理を動かしたくない場合にスキップしやすい。
– [ruby-jp](https://ruby-jp.github.io/) Slack の #support チャンネルの @wakaba260 さんの投稿でこの方法を知りました。ありがとうございます :pray:

# バージョン情報

“`shell
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

$ bin/rails -v
Rails 7.0.3.1
“`

# 方法

以下のモデル

元記事を表示

Rails×Unicorn×Nginx(Docker)

「Railsを本番環境で動かす際に、UnicornとNginxを使用している人が多いけど、一体なんでだろう?」

そう疑問に思ったので、Rails×Unicorn×Nginxについて調べてまとめました。

## Railsとアプリケーションサーバー
本題に入るまえに、Railsとアプリケーションサーバーについて解説します。

通常、$rails sでアプリケーションサーバーの「rack」が起動し、Railsが動き出します。

rackとは、rubyのコードで書かれたWebフレームワークとWebサーバーを繋ぐもので、シンプルに言えばRailsを動かすアプリケーションサーバです。

ただし、高負荷に弱いというデメリットがあるそうで、その問題を解決するための方法がRails×Unicorn×Nginxになります。

### Rails×Nginx×Unicornの仕組み
まずNginxとUnicornについて簡単に解説します。

– Nginxは、高負荷に強いWebサーバ。
– Unicornは、Rack専用のWebサーバ。

Webサーバーがダブっていますが、これで合っています。

なぜな

元記事を表示

RailsアプリをEKS on Fargate環境で構築

RailsアプリをEKS on Fargateで構築する際に調べた事まとめ
## Railsアプリを公開するには
EKS on Fargate構築では、AWS Load Balancer Controllerを使用することでアプリを公開することができるが、以下のようなデメリットが存在する。

– クラスタの再構築時にコントローラー等の設定を再度する必要がある。
– Terraformを使ってAWS Load Balancer Controllerを構築することができない。

クラスタを再構築しないのであれば問題ないかもしれないですが、やや気になるポイントだと思います。

### ノードグループを作成する
本来であればノードは全てFargateに任せたいところですが、今回はCoreDNSデプロイメントの設定変更を回避するために、一部ノードグループを作成しました。

CoreDNSとは、EKSクラスターのDNSサーバー(kubernetes推奨)。

coreDNSに問題があると、DNSが500エラーコードを返すこともある。

※ノードグループを用意したくない場合は、EKSクラスターを構築

元記事を表示

Rails✖︎Webpacker

Webpackerとは、webpackをRailsで使用するためのgemパッケージ。

webpackを使用すれば、Javascriptなどの静的アセット(リクエスト毎に生成しないもの)の管理&packにまとめる等が出来る。

※静的アセットを利用することで、アプリケーションの高速化につながる。

## WebpackerをRailsで使うには
1. YarnとNode.jsを用意。
2. Webpackerをインストール。

### Webpackerインストール後
Webpackerのインストール後は、app/javascript/packs以下のJavascriptファイルがコンパイルされてpackにまとめられるようになる。

packにまとめられたコードは、以下のようなコードで呼び出すことが出来る。

“`
<%= javascript_pack_tag 'hello_vue' %>
“`
※自分の場合は、packsディレクトリにhello_vue.jsというファイルが存在するので、’hello_vue’を指定している。

### コンパイルする方法
“`
rails a

元記事を表示

Rails6でorder(:id)ではなく任意のID順で並び替えたい

## 駆け出しにもわかる簡単な並び替え
はじめまして、1年を経過した駆け出しRailsエンジニアです。
`Model.where()` で取得したリレーションを任意のID順で並び替えたいということがありました。
この記事は**Rails6**向けとなっており、**Rails7**の方は最後の項目だけ読んで頂ければOKです:ok_hand:

それでは早速、下記のような `animals` テーブルを例として進めて行きます。

ID|名前(必要な情報)|年齢(不要な情報)
—|—|—
1|taro|2
2|hanako|7
3|jiro|4

## まずはID順に並べる場合

“`rb
animal_ids = [1, 3, 2]
Animal.where(id: animal_ids).order(:id).pluck(:name)
# SELECT “animals”.”name” FROM “animals” WHERE “animals”.”id” IN ($1, $2, $3) ORDER BY “animals”.”id” ASC
# => [“taro”,

元記事を表示

【Ruby, Ruby on Rails】Active Storageで1つの投稿に複数の画像をアップする

## 初めに
プログラミングスクールでは、Active Storageを使って1つの投稿に1枚の写真を保存する方法を学びました。今回、ポートフォリオ制作時に複数枚保存できるといいな、と思って色々調べて実装したのでここにまとめておきます。

## 完成形
– 新規投稿ボタンを押下すると、フォイル選択のフォルダが出てくる。
– Shitキーを押しながら複数枚画像を選択し、アップロードボタンを押下すると、複数枚の画像が投稿フォームに反映される。
– 投稿ボタンを押下すると、上記で詮索した画像とともに投稿される。

## 実装
それでは、実装していきます!
(画像の単数枚投稿が既に頭に入っているという前提で実装方法を説明していきます)

### 下準備(チェックリスト)
##### ✅ 以下のgemをbundle install してますか?
“`ruby
gem “image_processing”, “>= 1.2”
“`
##### ✅ 投稿を保存するモデル、テーブル、カラムを作っていますか?
※モデル、テーブル、カラムを作成するときに、画像を保存するためのカラムは必要ありません。

元記事を表示

メッセージ系のSNSを作ろうとしたのに掲示板になっていない?

# SNSと掲示板の違い
>エンジニアなら誰しも一回はLINEのようなSNSアプリを作りたいと思ったことはあるはずです

**SNSもどきの例**

![u8amv-lvx1w.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1980538/29b45b89-a1e0-c7c2-86b2-8ed257822b3a.gif)

問題点

– リアルタイムで更新されていないためコミュニケーションが図れない!!!

> Twitterのタイムラインで手動で更新する形、掲示板でスーパーリロードをかけて更新する場合とは大きく性質が異なる。画面開いたままのユーザーもいるため画面遷移時にAPIを叩いていたのではまともな会話にならない。

# 今回使うもの
[フロント用のテンプレート](https://github.com/kawabata324/template-react-typescript-vite)
React Typescript
[APIのテンプ

元記事を表示

【Rails】好きなログファイルを作って出力

# 環境
– Ruby 2.7.6
– Rails 5.2.8

# コード
“`ruby
@log = Logger.new(‘log/check_site.log’)

msg = “AAAAAAAAAAAAA”

@log.info(msg)
“`

# まとめ
設定ファイル触るとかありますけど、その場その場でちょっと違うログファイルに出力したかったりするので、この方法が良いと思います。

カンタン便利。

ログレベルをdebugやらinfoやらあるのは、他記事を参考にして下さい。

これとか↓
https://qiita.com/sobameshi0901/items/b963e7046e2ae8b8e813

終わり

元記事を表示

DockerでRails環境(Nginx+Unicorn+MySQL)を構築してFargateへデプロイするまで〜開発環境編〜

今回、個人的な学習として、ローカル環境で動かすRails環境(Nginx+Unicorn+MySQL)をDockerで構築しましたので、備忘録&学習のアウトプットとしてこの記事を作成しました。

最終的にはECS(Fargate)を本番環境としてデプロイすることをゴールとしており、
そちらの記事については現在作成中です。

### 参考
初学者で知らない人はいないであろう神記事。アプリ作成全体的に参考にさせていただきました。本番環境編のcredentialsの部分もお世話になっています。
[【2021年リライト版】 世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://zenn.dev/naoki_mochizuki/books/1471ce20222227)

Nginx&Unicorn設定で参考にさせていただきました。
[【Nginx+Unicorn】 サーバ起動手順まとめ](https://zenn.dev/endo/articles/25e84b513a2bd3c8a747)

DBの起動について参考にさせていただきました。(後ほど紹

元記事を表示

Ruby on Rails herokuへのデプロイでのエラー

こんにちは、文系大学生のプログラミング初心者です。
今回、Ruby on railsのチュートリアルを行なっている時に、予期せぬエラーが出たので、エラーの解決方法についてまとめてみました。

具体的にエラーが出たのは、herokuにデプロイを行う時です。
エラーの内容を辿ってみると、、
まずは、
~~~ruby:terminal
remote: !
remote: ! Precompiling assets failed.
remote: !
~~~

こちらを発見、そしてさらに辿ってみると、

~~~ruby:terminal
remote: —–> Installing node-v16.13.1-linux-x64
remote: —–> Installing yarn-v1.22.17
remote: —–> Detecting rake tasks
remote: —–> Preparing app for Rails asset pipeline
remote: Rails couldn’t infer whether

元記事を表示

Rubyのデバッグを楽にする

### はじめに
プログラムをデバッグするときはデバッガーを使ったり二分探索でコメントアウトしてみたり、ログを出してみたりすると思います。
私はログを出してデバッグするのをよくやるのですが、ただ単に

“`ruby
p “value => #{value}”
“`
とか
“`ruby
p value
“`

とかでデバッグしようとしたとき、小さいスクリプトならそれでも問題ないですが、大きいプログラムでやると他にもたくさんログが出ていて出力したものを見失いますよね。

なので自分はよく以下のように書いていました。
“`ruby
# こんなのとか
p ‘++++++++++++++’
p ‘value’
P ‘++++++++++++++’
# こんな感じ
p ‘— (~_~) —‘
p ‘value’
p ‘— (~_~) —‘
“`

他の箇所が絶対に出さないようなものを出していました。顔文字は結構おすすめです。デバッグ中のすさんだ心がかわいい顔文字で癒される。
でもこれ毎回毎回やるのは面倒だなと思いました。
最近業務でフロントエンドをよくやっていたのもあっ

元記事を表示

ざっくりわかる Sprocketsとは

# 何を実現してくれるか

sprocketsはapp/assets 配下にある jsファイルとcssファイルをそれぞれ 1 つのファイルにまとめる。JavaScript と CSS をまとめる理由は、Rails アプリケーションにブラウザでアクセスした時にサーバへのアクセス回数を減らすため。

# 関連する用語

### アセットパイプライン

Sprocketsがcssファイルとjavascriptファイルをまとめるまでの工程はアセットパイプラインと呼ばれている。

### コンパイル

特定のプログラミング言語を用いて記述されたコンピュータープログラムを他の言語 を用いて記述された同じプログラムに形を変えることである。Sprocketsではアセットパイプラインの処理を実行することをコンパイルという。

### ディレクティブ

ディレクティブとはSprocketsで外部ファイルを読み込むための記述のことである。
ここでいう外部ファイルとはjsの場合`app/assets/javascripts`配下、cssの場合`app/assets/stylesheets`配下にあるファイルの

元記事を表示

railsのインストール

railsをインストールしようとした際に、要所要所でどん詰まりしました。
自分の覚書のためにも初投稿してみます。

主に以下の手順で詰まりました。

・command line toolsのインストール
・home brewのインストールのやり方
・railsインストールできたはずがコマンド実行すると「sudo gem install」しろの無限ループ

手順を整理しておこうと思います。

1.「Command Line Tools」のインストール

“`
xcode-select –install
“`
これでできるそうなのですが、
“`
$ xcode-select –install
xcode-select: error: command line tools are already installed, use “Software Update” to install updates
“`
と表示され、インストールできていない様子。

解決法:古いものを削除して再度実行しました
“`
sudo rm -rf /Library/Developer/CommandLi

元記事を表示

Windows10でRails開発環境を準備

GitHub上にすでに存在するRailsアプリ git@github.com:ichylinux/bizquest.git を事例として、Windows10上にRails開発環境を準備する手順を記録しておく。

## VisualStudioCode

#### インストール

https://code.visualstudio.com/ からダウンロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206475/c972ea0d-934c-cf3c-98f6-2a6d6eade955.png)

クリックしてインストール。

#### 日本語化

メニューの「View] => [Extensions] を開き、Japanese で検索する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206475/efbcffb4-2d57-94a9-4e15-367ce9b59195.png

元記事を表示

ElasticBeanstalkで動かしているRailsプロジェクトにpuma_worker_killerを導入する

## 起きた問題
ElasticBeanstalkで動かしているRailsプロジェクトのメモリ使用率が高止まりしていました。
プロセスを見てみるとPumaが主な要因でした。
[![Image from Gyazo](https://i.gyazo.com/1b8f9882a59b3dace952534fe78ea802.png)](https://gyazo.com/1b8f9882a59b3dace952534fe78ea802)

メモリを解放するために、インスタンスの自動入れ替えも検討しましたが、ElasticIPの自動付与問題の課題があり、今回は`puma_worker_killer`というgemを使用してみることにしました。

puma_worker_killerの公式ページ
https://github.com/zombocom/puma_worker_killer

## 前提
– ElasticBeanstalk環境 (Ruby 2.7 running on 64bit Amazon Linux 2/3.4.7)
– EC2インスタンス数:1台 (ElasticIP付き

元記事を表示

エンジニア向けチートシート集

## はじめに

今回はエンジニア向けのチートシート集のまとめを紹介していきます。

チートシートを利用することで

– 作業効率が上がる
– 概要が掴みやすい
– 学習にもなる

といった恩恵が得られます。

ただし前提として毎回コードを書くたびに「**チートシート集でカンニングすればええや**」と思うのではなく「**最初はチートシートでカンニングしつつ徐々に体で覚えていく**」ことを意識して使うことが大切です。

最終的にはチートシートは見ずに「**自分の使える技術**」として定着させるための道具だと思って使ってください。

## この記事の対象者

– エンジニア初心者~中級者
– 作業効率を上げたい人
– コードを書くテクニックを知りたい人

## [VsCodeチートシート](https://camo.qiitausercontent.com/8e7b0b88be526969f856b75f97e05b23516f0d72/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732

元記事を表示

OTHERカテゴリの最新記事