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

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

CapistranoでAWS EC2にデプロイする際に、`bundle lock –add-platform x86_64-linux` and try again.で詰まった

# はじめに
学習用のメモとして投稿します。
Capistranoを使用して、Railsで作成したアプリをAWS EC2にデプロイをする機会がありました。
その際に遭遇したエラー\`bundle lock –add-platform x86_64-linux\` and try again.とその解決策について書いていきます。

# Capistranoでデプロイ
色々と設定して、いざデプロイということで、次のコマンドを実行します。
“`zsh:
bundle exec cap production deploy
“`
・・・失敗しました。。

エラーを見ると、次のような記載があります。
“`zsh:
# 略
Your bundle only supports platforms [“aarch64-linux”] but your local platform
is x86_64-linux. Add the current platform to the lockfile with
`bundle lock –add-platform x86_64-linux` and

元記事を表示

Rspecでの配列でのエラーが出た

### Rspec今日学んだこと

今日はゆっくりコードを書いていたんだが、

投稿を表示させるspecを書いていた。

`・boardには対応するtag_listがある(tagは配列で保管される)`
`・ページごとに取得するtag_listを決めている(boards_path(tag_name: ‘park’))`
`・投稿一覧ページにとんだ際指定したtag_listの投稿が取得できているかの確認`

が成功すればOK。

“`
RSpec.describe “投稿の表示”, type: :system do
before do
@user = FactoryBot.create(:user)
end
#パークエリア情報の投稿を取得
it ‘パークエリアの投稿を取得できること’ do
@board = FactoryBot.create(:board,tag_list:’park’)

visit boards_path(tag_name: ‘park’)
expect(page).to have_current_path(boards_path

元記事を表示

(rails)ActiveRecordのメソッドについて

・まずはRails Consoleとターミナルに入力して、ターミナル上でRailsアプリケーションに命令を出せるようにします。(Rails Consoleはrails cと省略可能)

・createメソッドを使用することで、テーブルにレコードを作成・保存できます。
基本構文と例文は以下の通り
`モデル変数 = モデル名.create(属性1: 値1, 属性2: 値2)`
`user = User.create(name: ‘John Doe’, email: ‘john@example.com’)`

・allメゾットについて
allメソッドは、テーブルからすべてのレコードを取得するためのメソッドです。
基本構文と例文は以下の通り
`Model名.all`
`Blog.all`

・countメゾットについて
countメソッドとはテーブルのレコードの件数を取得するためのメソッドです。
基本構文と例文は以下の通り
`Model名.count`
`Blog.count`

・whereメソッドについて
whereメソッドとはテーブルのカラムに特定の値が入っているレコードのみを取得するこ

元記事を表示

【Rubocop】reversibleなmigrationではない。

rubocop のご指摘
“`
C: Rails/ReversibleMigration: change_column_comment(without :from and :to) is not reversible.
“`

#### 何をしたらご指摘を受けたのか

DBのカラムにコメントを追加したいと思い、以下のコマンドを用いてマイグレーションファイルにコメントを追加しました。

“`
$ bundel exec rails g migration AddCommentsToTable
“`

内容
“`rb:200xxxxxxxxxx…_add_comments_to_table.rb
class Add CommentsToTable < ..... def change change_column_comment(:hoge, :fuga, 'hogehogefugafugaしたい') end end ``` ``` $ bundle exec rails db:migrate ``` ``` 確認 $ bundle exec

元記事を表示

【初心者向け】AWSは怖くない!これだけ読めばAWSのアーキテクチャ図がわかるようになる〜後編〜

こちらはシリーズ記事の後編です。

前編はこちらからどうぞ。
[【初心者向け】AWSは怖くない!これだけ読めばAWSのアーキテクチャ図がわかるようになる〜前編〜](https://qiita.com/morihagi/items/620b5714892511cce595)

# 前回の続き
ここでちょっと図を整理します。
 ・3層アーキテクチャの各層の名称を削除
 ・仮想サーバー(インスタンス)の領域を明確化
![スクリーンショット 2023-07-05 2.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3348836/5ee73c74-725a-f077-5ee6-007ea5f769c4.png)

# 世界中にあるAWSのサーバーの中で、どこにあるサーバーを使いたいですか?
AWSは世界各地にの主要な都市(`リージョン`)ごとに、複数のデータセンター群(`アベイラビリティゾーン`)([イメージ図](https://www.google.com/search?q=%E3%83%87%E3

元記事を表示

Rails map,flatten,pluckなどなど…

# はじめに
– 調べたり試行錯誤したりして実装したメソッドについて、自身の定着のためにまとめました
– 学習内容の備忘録です

# 目次
1. コミュニティIDの取得について(コードの【A】参照)
1. UserモデルとCommunityモデルのJoin操作について(コードの【B】参照)
1. コミュニティに所属するユーザーの投稿を取得することについて(コードの【C】参照)

以下の記述について、自分なりに苦労したため、まとめてみます。
“`ruby:post.html.erb
#省略

def index
@post = Post.new
if current_user.communities.present?

#【A】
community_ids = current_user.communities
.map(&:subtree_ids)
.flatten

#【B】
commu

元記事を表示

【ほぼコピペで完成】スクロールに合わしてヘッダーを表示・非表示する

# 経緯
**ちょっとオシャレ?なヘッダーを作ってみたくなった備忘録です。**

railsで普段開発してるので最後はrailsで導入する方法もサラッと書いてます。

# 完成形

See the Pen
Untitled
by okok111 (@okok111

元記事を表示

windowsでbundle install mysql2について

エンジニア学習4か月目に入りましてようやく自作ポートフォリオの設計をし始めたのですが、
その前にrailsのRDBとしてデフォルトのSQliteではなく、MySQLを使うのにとても苦労したのでもし初学者や未経験の方で同じような壁にぶつかっているwindowsユーザーの助けになればと思います!

※ぶっちゃけ最初のプログラミング言語としてrails触るならMacの方が簡単です(笑)
バージョン管理が優秀ですし…。

## MySQLのインストール
まずは[このページ](https://dev.mysql.com/downloads/)よりMySQL Community Serverをインストールします。
※インストールする具体的な設定は[こちらのサイト「](https://www.javadrive.jp/mysql/install/index2.html)を参考にしました。

次にWindows PowerShellで下記コマンドを打ってパスワードを設定します。
すでに設定済みの場合は、パスワードを入力してください。
“`
mysql -u root -p
“`
そうするとウェル

元記事を表示

(rails)modelの作成と命名規約について

(確認)modelとは
modelとは簡単言うと、データベースのテーブルとアプリケーションのビジネスロジックの間でデータのやり取りを行うためのクラスです。

modelを作成するためのコマンドは以下の通りです
“`
rails g model モデル名 [属性名:データ型 …]
“`
例文は以下の通りです
“`rb
rails g model Post title:string content:text
“`

このコマンドを実行することによってモデルファイルと共に、マイグレーションファイルも作成されるので `rails g migration` でマイグレーションファイルを作成する必要がない

また、modelに名前をつける際に以下のような規約があります。
1.モデル名は単数形で記述します。
例: User, Post, Product

2.モデル名はキャメルケース(単語の先頭を大文字にする)で記述します。
例: ArticleCategory, OrderItem, UserProfile

3.モデルに対応するデータベーステーブル名は、モデル名の複数形で表現します

元記事を表示

Rails&AWSの学習でチャットGPTを使ってみた

今回の記事はこちらの記事の続きです。
https://qiita.com/tomo178/items/6b191f359979d4292d52

あれからRailsとAWSの基礎学習をやり、チャットGPTを使って頑張ってみたのでその検証結果を残しておきます。

# ◆検証結果

結論から言うとどちらもチャットGPTの活用は難しいことが分かりました。

理由は以下のような感じです
①AWSはいろんな画面をまたいで設定する必要があるのでチャットGPTに相談するのは難しい。
②Railsアプリケーションはディレクトリがたくさんあるので一度に指示を出すのが難しい。

特にAWSの方はGoogle検索をして調べた情報を参考にしたほうが全然速いことが多かったです。
GPT4を使っていても、満足な回答が得られないことが非常に多かったです。
AWSの学習は独学で自力でやっていくのは難しいので、要所要所でMENTAなどでコーチを付けることをオススメします。

# ◆有用だったアイデア

・treeコマンド
これ地味に結構便利でした。
treeコマンドとはLinuxのコマンドで、例えば
tree ap

元記事を表示

ゲストログイン機能について

## はじめに

ポートフォリオにゲストログインを実装したので
忘備録として残します。

## その1.ルーティング

routes.rbにゲストログイン用のアクションを設定します。
`SessionsController`に新しいアクション`guest_sign_in`を準備します。

“`ruby:config/routes.rb
devise_scope :user do
post ‘users/guest_sign_in’, to: ‘users/sessions#guest_sign_in’
end
“`

## その2.コントローラ
`guest_sign_in`アクションを設定するため,app/controllersにusersディレクトリを作成し,その中に次のsessions_controller.rbを作成します。

“`ruby:app/controllers/users/sessions_controller.rb
# ゲストログイン機能
def guest_sign_in
user = User.guest
sign_in user

元記事を表示

Cookieとセッションの違い

Webに関する基礎知識をつけるべく、これまでなんとなくで把握していたCookieとセッションについて、改めて学習しました。その記録をこちらに残しておきます。

どなたかのお役に立てれば幸いです。

# Cookieとは?
“`
Cookieとは、WEBサイトを閲覧したときに、
訪問者が訪れたサイトや入力したデータ、
利用環境などの情報が記録されたファイル(仕組み)を指します。
“`
引用:https://gmotech.jp/semlabo/webmarketing/blog/cookie/

# セッションとは?
“`
セッションはユーザーがWEBサイトにアクセスしてから、
最終的に離脱するまでの行動を示す指標です。
ユーザーがWEBサイトへ訪問した回数とも捉えられ、
自サイトにおけるユーザーの訪問回数を確認する場面でも役立つはずです。
“`
引用:https://www.switchitmaker2.com/web-analytics/web-session/

# Cookieとセッションの違い

– どちらも情報・データを保存する機能である。
– 保存場所や、保存期間

元記事を表示

【Rails】kaminariを使ってページネーションする

# 1. kaminariのインストール
ページネーションを導入するためにkaminariというgemをインストールする。
“`Gemfile
gem ‘kaminari’

→ bundle install
“`
Gemfileにkaminariと記入し、bundle installする。
(gemをインストールした後は一度サーバーを再起動しないとうまく読み込まれない。
Ctrl-cでサーバを止め、$ rails sでサーバーを起動する。)

# 2. ページネーションのデフォルトの設定ファイルを作成/編集
ターミナルにて、設定ファイルの作成コマンドを実施。
“`
rails g kaminari:config
“`
config/initializers/kaminari_config.rbを開くと、デフォルトでコメントアウトされた状態で入っているので、設定したいもののコメントアウトを外す。

“`
# frozen_string_literal: true

Kaminari.configure do |config|
# config.default_per_pa

元記事を表示

サービス無停止でRedisを移行した話

# はじめに

自分の組織ではRedisのアップグレードに伴って、VPCを移行するニーズがありました。
アップグレードするためだけなら、色々方法はあります。
AWSが公式で推奨する方法は別にありますし、Redisの公式も別です。
この記事では、Redisをサービス無停止でのRedis移行に関してをまとめたいと思います。

# この記事の想定読者

別のネットワークのRedisにリアルタイムで同期してサービス無停止で切り替えを行いたい人

つまり、

– AWSからオンプレミスへ
– AWSからGCPなど別のクラウドサービスへ
– NonManagedなRedisからElastiCacheのようなマネージドサービスへ

サービス無停止で切り替えができることと同義かとおもいます。

AWSが提供しているデータ同期サービスDMSは
AWS -> xxx のデータ同期ができないです。
なので、サービスで行いたい場合は参考になるかと思います。

# きっかけ

自分が開発に関わっている組織ではRedis3系が使われていました。
AWSのElastiCacheのRedisのEOLが7月末に行われる

元記事を表示

いいねの合計カウントが多い順に投稿を表示する

今回は、本の投稿一覧ページで、過去一週間でいいねの合計カウントが多い順に投稿を表示して行きます!
#### 初めに 
本投稿アプリ作成中!
:shamrock: **前提条件**
・device導入 ・Bootstrap導入
・ユーザー機能実装済(Userモデル)
・投稿機能実装済(Bookモデル)
・いいね機能実装済 (favoriteモデル)
___
#### :shamrock: アソシエーション追加
:star:**has_many :favorited_users, through: :favorites, source: :user** を追記します。

この関連付けは、多対多の関係を持つモデル間の関連付けを簡潔に表現するためのコードであり、中間テーブルを介して関連するモデルにアクセスすることができるようにします。

:snowflake:**through: :favorites, source: :user**
(投稿モデルが直接ユーザーモデルにアクセスすることができるようにする。)
:snowflake:**through: :favorites**
(中間テーブルを

元記事を表示

Dockerで既存のRailsアプリの環境構築を行う

# はじめに
Dockerの学習として既存のRailsアプリの環境構築を行ったため、作業内容をまとめます。

# 開発環境
下記を使用して環境構築を行いました。

– Mac(M1 chip)
– Ruby 3.0.2
– postgres 12.0
– node 12.4
– yarn 1.16.0

# フォルダ構成
既存のアプリのフォルダ内に`Dockerfile`、`docker-compose.yml`、空のファイルである`Gemfile.lock`を追加しました。

“`
/rails-docker
├─app
├─bin
├─config
│ └─database.yml
├─db
├─lib
├─log
├─public
├─storage
├─test
├─tmp
├─vendor
├─babel.config.js
├─config.ru
├─Gemfile
├─Gemfile.lock
├─package.json

元記事を表示

bin/rails s でサーバ起動しないどころかエラーの玉手箱だった

“`bash
$ bin/rails s
=>You must use Bundler 2 or greater with this lockfile.
“`

サーバーを起動しようとしたところ、エラーが表示されました。

翻訳すると

> **このロックファイルでは Bundler 2 以降を使用する必要があります。**
>

という内容。

最初にbundlerは最新をインストールしていたと思いましたが抜けていたようです。

# bundlerのバージョンが低い

bundler のバージョンを確認してみます。

“`bash
$ gem list bundler
*** LOCAL GEMS ***

bundler (default: 1.17.2)
“`

バージョンがエラー文に書いてある通り低いのでインストール可能なバージョンの確認を行います。

“`bash
$ gem install ^bundler
=>インストール可能なバージョン一覧が表示される
“`

今回は最新のものを適用してみます。

“`bash
$ gem install bundler

元記事を表示

Railsチュートリアル3章まとめ

# 目的
静的なページの作成および自動化テストの作成

# 3-2 静的ページの生成
この章ではコマンドでのコントローラー作成方法について学びました。

・コントローラーの作成
コントローラーとアクションをまとめて指定することができ、コマンドラインでHomeページとHelpページ用のアクションもまとめて生成している

“`
$ rails generate controller StaticPages home help
“`
・変更の破棄
rails generateで作成したものを元に戻せる
“`
$ rails destroy controller StaticPages home help
“`

・作成したメソッドはルーターへ追加する
“`
Rails.application.routes.draw do
get “static_pages/home”
get “static_pages/help”
root “application#hello”
end
“`

# 3-3 テストから始める
この章ではテストの作成方法とテストの必要性について学

元記事を表示

【2023年版】”Rails is not currently installed on this system.”というメッセージが出たときの対処方法

## はじめに:sudo gem install railsは実行するな!
初心者さんが新しいMacにRailsの開発環境をセットアップすると、`rails -s`や`rails -v`を実行したときに以下のようなメッセージが表示されることがあります。

“`
$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`

日本語訳はこんな感じです。

“`
Railsは現在このシステムにはインストールされていません。最新バージョンを入手するには、次のように入力してください:

$ sudo gem install rails

そうすれば “rails” コマンドを再実行できます。
“`

「エラーが出たらちゃんとエラーメッセージを読むんだ!」という先輩プログラマの助言に従うと、ここは

元記事を表示

?初回だけ表示させるページを実装

***:cherries:学んだことを随時まとめてく:cherries:***
~間違っている点があれば是非教えてください~
***
# やりたいこと:cloud::cloud_rain::sunny:
:cloud:→:sunny:ページに初めて遷移する前に別の:cloud_rain:ページを表示させたい
# 使うもの
– session
セッション機能を利用してユーザーの一時的なデータの保存を行う
– if
セッションの真偽値で遷移ページを分岐させる
– and return
if文の中にrenderを複数使用するならアクションを明示的に終了させる

# 実装
“`ruby:controller.rb
def cloud
session[:キー名] = true #1.sessionの初期化/初回だよ〜ってデータ持たせる
end

def rain
session[:キー名] = false #3.遷移したら初回じゃないよ〜ってデータ持たせる
end

def sunny