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

Rails関連のことを調べてみた2022年10月14日
目次

【初学者】RailsをECS(Fargate)にNginxを使用せずにデプロイしようとした際に、ブラウザで「このサイトにアクセスできません」と出力されてしまった際の暫定対処

初学者のため誤り等あるかもしれませんが、本事像で丸3日ほど苦労し参考となる記事がなかったため、雑な記載になりますが備忘もかねて投稿させていただきます。
記載の内容で一旦解決しましたが、今後学習を進める中で根本原因や対処が誤っていた場合は修正するようにいたします。
特殊なケースかもしれませんが、どなたかのお役に立てば嬉しいです。

# 事象の概要

・Railsで作成したAPIをECS(Fargate)にNginxを使用せずにデプロイしたところ、
CloudWatch上ではRailsサーバが問題なく立ち上がっているにもかかわらず、
ブラウザでECSタスクのPublicIPに接続すると「このサイトにアクセスできません」と出力される。
## 詳細の状況
・インフラ構成は以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710784/fc3d50f3-308d-0109-5eae-4988f45544c7.png)

・RailsはDockerfileで3000番ポートで立ち上げ。
`

元記事を表示

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

# 概要
RailsアプリをECS Fargateにデプロイしようとしたところ、思っていた以上に苦労したので、自分のアウトプット&備忘録を兼ねて執筆しました。ECSのイメージとして、「開発環境で作成したイメージをそのままデプロイすればOK☆\(^o^)/」だったのですが、そう簡単にはいきませんでした。今回は開発環境編としており、本番環境編も現在執筆中です。

# 環境
– M1mac
– Visual Studio Code
– Docker(20.10.17)

# 構成
今回、**Dockerfileを開発環境と本番環境で分けるか否か**でとても悩みました。環境毎で動きが異なる部分があるため、分けた方が正直楽でした。しかし同時に「環境差分も生まれてしまう」こと、「DRYの原則に乗っ取っていない」ことから、Dockerfileは環境統一を図っています。実務ではどうなのでしょうか。。
“`
.(各Railsファイル)
├── config
| └── datebase.yml
| └── unicorn.rb
├── nginx
| ├── Dockerfile
|

元記事を表示

ユーザーの好みに合わせて服をおすすめするアプリを作成しました

未経験からのWeb系エンジニア転職を目指し、ポートフォリオサイトをRuby on Railsで作成しました。

## アプリケーション
  
アプリケーション:[「PICK OUT」](https://warm-stream-98443.herokuapp.com/)
※Herokuで動かしているので最初のページの表示に時間がかかる場合があります
ソースコード:https://github.com/bellmmm/original_rails_app

## アプリケーション概要
アカウントを作成したユーザーに対し、テストを通してユーザーの服の好みを判断し、ユーザーの好みに合わせて洋服をおすすめするアプリケーションです。

## 目的
自分の好きな服、似合う服をはっきりと認識している人は少ないと思います。私もECサイトで服を購入したり店舗で試着をしてみて、しっくりこないと感じたことが多くあります。そこで、人はそれぞれ好まない要素が無意識にあると仮定しました。このWebアプリでは、ユーザーがしっくりこない服をいくつか選ぶことで好まない要素を想定し、それを持たない服をおすすめ商品と

元記事を表示

【解決済】Rspec WrongScopeErrorが発生

Rspecでテストを走らせた際に発生した問題について、備忘録として投稿します。

## 発生した問題
“`ruby:ターミナル
Failure/Error:
raise WrongScopeError,
“`#{name}` is not available from within an example (e.g. an ” \
“`it` block) or from constructs that run in the scope of an ” \
“example (e.g. `before`, `let`, etc). It is only available ” \
“on an example group (e.g. a `describe` or `context` block).”

`name` is not available from within an example (e.g. an `it` block) or from

元記事を表示

【Rails】Rails実装開始の前にMVCを学ぼう【基本中の基本】

はじめに

Railsの実装にあたり欠かせないMVCの概念の理解。
MVCとは単純に『Model,View,Controller』のことです。
最初はいやだからそれがなんなのよって感じなのですが。
しかしこれが理解できないとうまく実装できないため、
自分なりに噛み砕いてわかりやすく説明していきたいと思います。

MVCをわかりやすく例えてみたい①

まずはMVCと調べるとよく目にするこの画像。
> https://www.javadrive.jp/rails/ini/index7.html
(参照サイト)

見るとわかるようなわからないような…という感じでした。最初は。
これはブラウザー(つまり今自分が触っているPC画面)から手に入れたい情報(Webサイト

元記事を表示

Webpacker::Manifest::MissingEntryErrorの解決

# 前提
“`
$ rails -v
Rails 6.0.3
$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin21]
“`

# 起きたこと1
Webpacker::Manifest::MissingEntryError

“`
$ bin/rails s
<略>
ActionView::Template::Error (Webpacker can’t find application in /Users/kosuke/works/rails-demo/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has

元記事を表示

[Rails] モデル名.newってなんぞや[初心者向け]

# 目次
[1.はじめに](#はじめに)
[2.目的](#目的)
[3.モデル名.newとは](#モデル名newとは)
[4.モデル名.saveをすると](#モデル名saveをすると)
[5.まとめ](#まとめ)

# はじめに
りくがめと申します。理解力アップのため記事を書くことにしました。
記事を書くのは初めてなので、温かい目でみていただければ幸いです。
では、よろしくお願いします!

# 目的
**モデル名.new**、**モデル名.save**ってなんぞや
**空のインスタンス**ってなんぞや
ということを説明します。
使い方の説明ではないので、使い方を知りたい方はほかの記事を探してください。

# モデル名.newとは
モデル名.newの説明の前に**モデル**の説明をしておく必要があります。
モデルとは**データベースとやり取りをするところ**です

![qiita.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2916411/5f68ae7e-a084-78b3-4c3e-6989e67c

元記事を表示

CircleCI Herokuへのデプロイ時に’No images to push’エラーが出る場合の解決方法

# 概要
CircleCIでHerokuへのデプロイを実行した際、イメージが見つからないというエラーが発生した。
解決方法についてメモ。
“`bash:エラー内容抜粋
#!/bin/bash -eo pipefail
heroku container:push web -a $HEROKU_APP_NAME
▸ No images to push

Exited with code exit status 1
CircleCI received exit code 1
“`
# 環境
ruby 3.0.2
rails 6.1.4
rspec-rails 5.1.2
CircleCI 2.1

# 先に結論
デプロイ対象ディレクトリにDockerfileが含まれるようにする。

“`yml:.circleci/config.yml
version: 2.1
orbs:
ruby: circleci/ruby@1.4.0
browser-tools: circleci/browser-tools@1.4.0
heroku: circleci/heroku@1.2

元記事を表示

【Rails】コンソール内でmigrateする方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## コンソール内でmigrateする方法
コンソールでUserを作成しようとした際にエラーでできず、最終的にコンソール内でmigrateするのに時間がかかったので備忘録にする。

“`
> User.create(name: “山田次郎”)
=> ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation “users” does not exist)

> User
=> User(Table doesn’t exist)

> rails db:migrate
=> NameError (undefined local variable or method `migrate’ for main:Object)
“`

“`
> class CreateUsers < ActiveRecord::Migration[6.0] > def change
> create_table :user d

元記事を表示

【Rails】ActiveStorageはdependent: :destroyをつけなくてもよい

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## has_one_attachedにオプションは不要

“`app/models/user.rb
has_one_attached :avatar
“`

> If the :dependent option isn’t set, the attachment will be purged (i.e. destroyed) whenever the record is destroyed.

“`ruby
has_one_attached :avatar, dependent: :destroy
“`
のようにオプションつけなくても、親モデルが削除されたら付随するavatarも削除してくれる!

https://api.rubyonrails.org/v6.0/classes/ActiveStorage/Attached/Model.html#method-i-has_one_attached

元記事を表示

ActionController::InvalidAuthenticityTokenの対処方法

# 環境
Rails 6.1.6.1
ruby 2.6.8
OS WSL2(Ubuntu 20.04.2 LTS)

# APIを使用したPOSTの際にエラーが起こる
### エラー文
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294147/973e9c1f-9077-c629-0d11-0082f8e4334c.png)

“`
ActionController::InvalidAuthenticityToken in Users::XXXXController#create
ActionController::InvalidAuthenticityToken
“`

## 原因
CSRF対策のトークンが無いことが原因のようです。
※CSRF:クロスサイトリクエストフォージェリ

## 対処方法
protect_from_forgeryをcontrollerに追記することで解決
“`
class Users::XXXXController < ApplicationCont

元記事を表示

【RSpec】データ作成で使える小技

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## テストデータの作成で使える小技

### before

“`ruby
let(:cancel_applicatoions) { create_list(:cancel_applicatoion, 30) }
cancel_applicatoions.each do |cancel_applicatoion|
create(:cancel_applicatoion_status, cancel_application: cancel_applicatoion)
end
“`

### after

“`create_list“`で作成したデータをeachのようにループできる。
“`ruby
create_list(:cancel_applicatoion, 30) do |cancel_applicatoion|
create(:cancel_applicatoion_status, cancel_application: cancel_applicatoion)
en

元記事を表示

RSpec(Ruby on Railsのテストコードを書くために用いられるGem)の導入

# はじめに
RSpec導入の流れを忘れないために記録に残す。

# RSpec導入の流れ
## 1.Gemの導入
# Gemfile内
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
gem ‘rspec-rails’, ‘~> 4.0.0’ ⇦この行を追記
end

% bundle install

## 2.RSpecの設定
% rails g rspec:install

<ターミナルで以下が表示されれば問題ない>
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helpe

元記事を表示

link_toでViewからControllerに値を渡す

## 環境
– Rails5.2
– Slim
– Bootstrap

## はじめに
ViewからControllerに値(パラメータ)を渡す場合、Viewに配置したsubmitのボタンを押して、画面に入力した値をControllerにPOSTする方法以外に、link_toを使って、GETでControllerに渡す方法があります。link_toを使って、値(パラメータ)をControllerに渡す方法について、色々とやってみました。

## 内容
seikyusクラスにsyori1という名前のメソッドを作ります。そして、ルート情報を次のように作ります。link_toで値を渡すときは、POSTではなくGETで渡します。
“`routes.rb
resources :seikyus do
get :syori1, on: :collection
end
“`

「テスト」という値を、ViewからControllerに渡すには次のように記述します。
“`index.html.slim
– test = “テスト”
= link_to “テスト1”, syori

元記事を表示

ユーザー管理機能(devise)の導入

# はじめに
deviseを用いたユーザー登録機能の実装順序を忘れないように記録に残す。

# devise導入の流れ
## 1.deviseの導入
下記コードの追記と、コマンドの実行

1.gemfileに追記
gem ‘devise’
2.gemインストールのコマンド実行
% bundle install

## 2.deviseの設定に関するファイルの導入
% rails g devise:install

#以下のようなlogが出れば成功
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================

Depending on your application’s configuration some manual setu

元記事を表示

インスタンス変数を用いて処理を効率化する

ログイン機能のアプリ作った際に、app/helpers/sessions_helper.rb
ファイルに以下のメソッドを定義しました。
“`
module SessionsHelper
def current_user
@current_user ||@current_user = User.find_by(id: session[:user_id])
end

def logged_in?
current_user.present?
end
end
“`
メソッドが呼び出されているviewファイル(app/views/layouts/application.html.erb)
“`
<% if logged_in? %>
<%= link_to "Profile", user_path(current_user.id) %>
<%= link_to "Logout", session_path(current_user.id), method: :delete %>
<% else %>
<%= link_t

元記事を表示

herokuでデプロイしたのに「The page you were looking for dosen’t exist.」が出た時にしたこと

railsでアプリケーションを作ってherokuにデプロイし、herokuで開いたところ「The page you were looking for dosen’t exist.」と出ました。
![スクリーンショット 2022-10-13 10.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881853/877d9c01-38c5-7c77-ec35-266af4d427b0.png)

「・・・え、なんで?」

これでめちゃめちゃ悩み、調べるのに時間を使ってしまったのですが、実は簡単に解決できました。

あくまでも私の場合で解決できたことなので、解決策の1つとして見てもらえればと思います。

結論から言うと、これは自分のページにアクセス来た時、最初に表示させたいページを設定してないので、このような画面が表示されました。

どういうことかというと、このページのURLは「heroku create」で作ったものです。(https://~~~.herokuapp.com/)

でもrailsで

元記事を表示

【解決済】RailsのHostAuthorizationによってELBのヘルスチェックがhealthyにならない

ポートフォリオをデプロイする際に発生した問題について、備忘録として投稿します。

## 発生した問題
Rails6 + AWSで下記の構成のようなアプリを開発していました。

![インフラ構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2263192/32b8dab2-46ef-7f69-a8c9-85d4cd39d76d.png)

Railsの`HostAuthorization`を利用し、`/api/health_check`というパスでALBからのヘルスチェックを行おうとしました。
しかし、Railsが`403エラー`を返し、ヘルスチェックが失敗してしまいました。

## 原因
Railsの設定は下記のようになっていました。

“`environments/production.rb
config.hosts << 'base_domain.com' ``` 原因は、 **「ヘルスチェック時のホスト名が`base_domain.com`でないからエラーになっていた」** というもので

元記事を表示

【Ruby on Rails】CanCanCan の authorize_resource はレコードの権限まではチェックしてくれない

# CanCanCan
Rails でいい感じにアクセス権を確認したり、作成・更新できるかを確認したり、そんなことができる gem です。

https://github.com/CanCanCommunity/cancancan

以下のような記事が参考になると思います。

https://qiita.com/umanoda/items/679419ce30d1996628ed#model%E3%81%AE%E3%81%AA%E3%81%84%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%B8%E3%81%AE%E6%A8%A9%E9%99%90%E8%A8%AD%E5%AE%9A

この gem を導入すると、controller で権限認証が楽にできます。

# authorize!
まず、本題の`authorize_resource`の前に、元となる`authorize!`を見てみます。
“`ruby
#books_controller.rb
def show
@book = Bo

元記事を表示

【Rails】M1 Macでシステムスペックの実行時にNet::HTTPServerException: 404 “Not Found”というエラーが出た場合の対処法

## 発生した問題

M1 Macでシステムスペックを実行したら突然以下のようなエラーが発生し、テストが実行できなくなった。

“`
Webdrivers::NetworkError:
Net::HTTPServerException: 404 “Not Found” with https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_mac64_m1.zip
“`

## 原因
Chromedriverの命名規則が変わった影響らしい。

https://github.com/titusfortner/webdrivers/issues/237

## 解決方法
webdrivers gemを5.2.0以上にアップデートする。

“`
$ bundle update webdrivers

$ bundle show webdrivers
/Users/jnito/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/webdrivers-5.2.0
`

元記事を表示

OTHERカテゴリの最新記事