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

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

【Docker】Rails + Puma + Nginx + MySQL + React(2)

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 【Docker】Rails + Puma + Nginx + MySQL + React(2)
### Nginx

“`Dockerfile:Dockerfile
FROM nginx:1.21.6

RUN rm -f /etc/nginx/conf.d/*

COPY nginx.conf /etc/nginx/conf.d/myapp.conf

ENV USER_NAME=myuser
RUN adduser ${USER_NAME} && \
chown -R ${USER_NAME} /var/cache/nginx/ && \
chown -R ${USER_NAME} /var/run/
USER ${USER_NAME}

CMD /usr/sbin/nginx

元記事を表示

vscode rails環境構築時のエラー brew doctor

# vscodeにrailsの環境構築の中で出たエラー
homebrewをインストールした後“`brew doctor“`を行った時
“`
Homebrew/homebrew-core (git ******** last commit *******)
*****@mbp ~ % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don’t worry or file an issue; just ignore this. Thanks!

Warning: Your Command Line Tools are too outdated.
Update them from Software Update in System Preferences or ru

元記事を表示

定数だけを切り出したファイルを作り、複数クラスで使えるようにする

### やりたいこと
Rubyで定義した定数を他のクラスでも使いたいとき、クラス名::定数名のように書くと思う。

ほとんどの場合は問題ないけれど、ときどき下記のような違和感や問題を感じるときがある。

– 関連が強いor内容が似てる複数のクラスで同じ定数を使いたいとき、特定のクラスにだけ定数を記載し、他のクラスではクラス名::定数名と書くことへの違和感
– クラス名が長いときなどに読みづらくなる

なのでより読みやすい、使いやすい形にしたかった。

( “`config/initializers/constants.rb“`で共通の定数を設定する方法もあるが、そこまで全体的に使いたい訳でもない場合を想定 )

### どうするか
定数用のmoduleを作って、定数を使いたいクラスにそのmoduleを読み込んで使う

### やりかた

1. moduleを作成し、定数を記載する
2. 使いたいクラスで読み込む

#### ① moduleを作って定数を書く

HogeConstants.rbを作成し、定数を書く

“`
module HogeConstants

NEKO

元記事を表示

rails7からrails6にダウングレードした

Gemfileのバージョン変更
“`Gemfile
– gem “rails”, “~> 7.0.2”, “>= 7.0.2.3”
+ gem ‘rails’, ‘~> 6.0.4’, ‘>= 6.0.4.7’
“`

コマンド実行
“`
$ bundle update
$ rails app:update (全てYES)
“`

`$ rails s -b 0.0.0.0`するとエラー起きるので、以下2点修正。

Gemfileにgem ‘listen’追加
“`
group :development do
# Use console on exceptions pages [https://github.com/rails/web-console]
gem “web-console”
gem ‘listen’
end
“`

config.ruからRails.application.load_server削除
“`config.ru
– Rails.application.load_server
“`

マイグレーションしていきます。
“`
$

元記事を表示

【Git】$ git remote add origin リポジトリURL を入力してfatal: remote origin already exists. とターミナルにエラーが表示された時の解決法

初めまして。プログラミングスクールに通っているso-heiです。現在2ヶ月目です。
自分の備忘録としてですが、同じエラーが出た方のお役に立てれば幸いです。
## 【問題】
“`
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
“`
ローカルリポジトリとリモートリポジトリの紐付けするために、上記をターミナルで入力すると表題のエラーが発生する。
## 【原因】
.git/configファイルに既にremote “origin”の設定が既に存在していた
## 【解決法】
### ①remote “origin”の設定を削除
“`
$ git remote rm origin
“`

上記のコマンドで入力して.git/configファイルの remote “origin”の設定を削除する

### ②もう一度試してみる
“`
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
“`

これでエラーは出なくなり、

この後にpushしましたが問題なく反映されました

元記事を表示

いいね Ajaxにする

# Ajaxとは?
ページを更新することなくページの内容だけを入れ替えられる。
ajaxの中核を支えているのはJavacriptの技術。

デメリットもあるらしいがそれを差し引いてもメリットがあると今は理解した。
何から手を出していいのかわからない。

## 早速実践
### ボタン
#### my_app/app/views/favorites/_favorite.html.erb
“`html
<% if current_user.like?(micropost) %>
<%= button_to user_favorite_path(current_user, micropost), method: :delete remote: :true do %>
<%= micropost.liked.count %>

<% end %>
<% else %>
<%= button_to user_favorites_path(current_user, micropost), meth

元記事を表示

Railsでlink_to deleteが出来ない

某オンラインスクールで学習4ヶ月目、
Railsにてオリジナルwebアプリを作成していて
link_toの”削除”が実行できなくてぐるぐるしたので備忘録として。
 

dpテーブルに投稿したレコードを削除するため実装、削除出来ず。
“`ruby
<%= link_to "報告の削除", dp_path(@dp.id), method: :delete %>
“`
 
エラー画面も出ず、元の画面に戻ってきてしまう。
ログを見るとどうやらGETで動いている模様。
 

参考にした記事
https://qiita.com/mami3sansan/items/6a9710b3ffdc937aa5f3
https://nabelog.org/695/
https://takayuki-inoue.hatenablog.com/entry/2018/01/12/105846
 

その他いくつか読んでみたが、解決に至る糸口が見つからず。
上記記事等から得た知識を元に思い当たる節を探ってみたところ、
作成初期に放り込んでいた、bootstrap絡みの
cssやらjavascriptあたりに要因が

元記事を表示

【Docker】NameError: uninitialized constant Gem::Source 解消法【Rails】

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## NameError: uninitialized constant Gem::Source 解消法
### 状況
以下の内容のDockerfileで`docker build -t <イメージ名> .`実行後、`docker run <イメージ名> rails new .`したところ以前は発生しなかった`NameError: uninitialized constant Gem::Source`が発生しました。

“`Dockerfile:Dockerfile
FROM ruby:3.1.1
ENV APP_NAME=myapp
ENV USER_NAME=myuser
ENV TZ=Asia/Tokyo

WORKDIR /${APP_NAME}

COPY Gemfile /${APP_NAME

元記事を表示

rails seeds.rbファイル とは

# 結論

初期データを作ってくれるファイル。
webアプリのテスト動作などに役に立つらしい。
データを一件入れる場合
“`seeds.rb
モデル名.create!(カラム名:値)
““

* seeds:種

# 具体的な使用例 userモデルオブジェクトの場合

アプリを作り、実際にデータを入れて動かしたい時
データを一件入れる場合
“`seeds.rb
user.create!(name:”倉本”) #!を付けるとエラー画面が表示される。つけないとnilを返すのみ。
““

データを100件入れる場合
“`seeds.rb
100.times do |n|
User.create!(
name:”test#{n+1}”
)
end
“`

# まだテストデータは反映されていない
“`ターミナル.
rails db:seed
“`
これでテストデータが読み込まれます。

# あ、後からテストデータを追加したい時
“`ターミナル.
rails db:migrate:reset
“`
これでテストデータが反映されます。
以上です。

元記事を表示

dbを削除したい

# heroku上のデータベース(pstgrsql)を削除して作り直したい

“`
$ heroku run rails db:reset
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:

.
.
.
.
“`

どうやら、production環境の

元記事を表示

whereメソッドを使ってDBから取り出すデータを絞り込む

## 実現したかった実装
送られてくるパラメーターの条件を満たしたデータをDBから取り出す実装をしたくて辿り着きました。

## whereメソッドを使用する
モデル名.where(条件)とする事で条件に一致したデータを取り出せます。

## 行った実装
whereメソッドに渡す引数はハッシュの形でいいことに気づき下記のようなクラスメソッドを書きました。

“`ruby
def self.match_recipes(dates)
hash = {}
dates.each{|key, value|
unless value.blank?
hash[key] = value
end
}
Recipe.where(hash)
end
“`
引数に条件の形となるハッシュを渡します。
“`ruby
dates = {“category_id”=>”1”, “genre_id”=>”1”, “type_id”=>””}
recipe = Recipe.match_recipes(dates)
“`
呼び出しのイ

元記事を表示

file_field_tag と submit_tag を横並びまたは縦並びに調整する

個人的な作業メモ。`erb`ではなく[haml](https://github.com/haml/haml-rails)を使っており、[.col-sn](https://getbootstrap.jp/docs/4.2/layout/grid/)やボタンのスタイルは、Railsの標準としてGemfileとして設定されている`Bootstrap`です。

## 横並び

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/34f00040-b720-2fdd-23fc-5e1edcabcf06.png)

“`haml
= form_tag import_items_path, multipart: true do
= file_field_tag :file, accept: “text/csv”, style: “display: inline;”
= submit_tag “一括編集”, class: “btn btn-success”
“`

## 縦並び

!

元記事を表示

rails require permit メソッドとは

# 結論
データベースに予期せぬ値が入らないように、ユーザーが入力する値を制限するメソッドの一種。
“`~.rb
params.require(テーブル名).permit(カラム名)
“`

* require:  〜を要求する
* permit : 許可を与える

# 具体例

投稿アプリにて、ユーザーがデータを入力し保存されるまでの順序

ユーザーがフォーム(記入欄)に入力
“`new.html.erb
<%= form_with model:@user, url: user_path, method: :post, local: true do |f| %>

 名前 : <%= f.text_field :name %>

<%= f.submit "送信" %>
# model:@user  モデルオブジェクトにユーザーが入力したデータがないか判断する
# url: user_path  入力した値をどこに渡すか指定
# method: :post  入力した値がデータベースにない場合→createアクション
# 入力した値がデータベースにある場合→upda

元記事を表示

【初心者用】rails db:migrateでエラーがでた

# 1.はまったこと
– NOT NULL制約を記述したマイグレーションファイルがちゃんと動作するか確認したい。
“`Ruby:db/migrate/20220401031908_change_tasks_name_not_null.rb
class ChangeTasksNameNotNull < ActiveRecord::Migration[5.2] def change change_column_null :tasks, :name, false end end ``` - terminalで ```rails c```を起動して、Task.nameにnilを入れてみる。 ```Ruby:terminal irb(main):002:0> Task.new(name: nil).save
(0.1ms) begin transaction
Task Create (1.5ms) INSERT INTO “tasks” (“created_at”, “updated_at”) VALUES (?, ?) [[“created_at”, “202

元記事を表示

rails paramsとは

# 結論

ユーザーからの情報を受け取るメソッド
“`
params[カラム名]
“`

*parameter: 設定値

# 具体例

ユーザーがある投稿を削除しようと選択した時、以下の手順で処理を行う。

“`index.html.erb
<%= link_to '削除', "/users/#{user.id}", method: :delete %>
# viewに表示されている`削除ボタン`,url
の指定、HTTPメソッドの指定(delet,patch,get
いずれか)
“`
ユーザーが要求したURLが左、それを右へ渡す。

つまり`HTTPメソッドdelete URL`という`要求`が来たから、その要求を処理するために`users_controllerのdestroyアクション`に`要求`を渡す
“`routes.rb
Rails.application.routes.draw do
delete “/user/:id”, to: “user#destroy”
end
# 要求をコントローラーの`destroy`アクションへ渡す
“`
“`users

元記事を表示

Ruby on Rails 事始め

# 本記事の対象者

これまでのRuby関連の知識として、下記のRuby製のOSSを触ったことがある。

* [Redmine](https://qiita.com/EasyCording/items/123be275d5c12e7c49f6)をSynology-NASで立ち上げることができた → [DSMのDockerを使用](https://qiita.com/EasyCording/items/b93c3e4fe5e44a8b17ac)
* GitlabをAWS-ECサーバーに立てることができた → UBUNTU上のDocker-Composeを使用

これからRubyを学ぶ上での、自分の目標設定

* RubyでWEBページが、サクッと作れること
* Redmineのプラグインが作れること
* Reactのような、最新のマテリアルデザインを取り入れたい
* React-Nativeで、スマホアプリも開発したい

# 反省点

* RORを始めるにあたって、これまで書籍等を読んできたが、そのたびに撤退させられている。
* GEMやBundleといった、Rubyの[環境整備](ht

元記事を表示

rails7でバリデーションエラーで画面が遷移しない場合の解決法

# 環境
Ruby 3.0.2
Rails 7.0.2.3

## 結論:Turboの動作をオフにする

form_withに `data: { turbo: false }` を追加する

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event, data: { turbo: false } do |f|
= f.label :name, ‘イベント名’
= f.text_field :name
“`

## 発生したエラー

バリデーションエラーが発生した際に、画面のリロードが発生せず、コンソールに以下のエラーが表示された。

“`ruby
Error: Form responses must redirect to another location at k.requestSucceededWithResponse
“`

## 問題発生時のコード

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event do

元記事を表示

Amazon ECS & Fargate と Docker on AWS CICDの学習まとめ(超初心者向け)

# これからはAWSのFargateだ!
ということで学習しながら設定の流れをメモとして随時更新します。

学習内容 ECS & Fargate, Load Balancing, Auto Scaling, ECR, CICD for ECS
最終的には、Rubu on Rails をFargateで動かすところまで目指します。

TOC

## AWSの準備&ユーザ設定
* AWSのアカウント作成
* IAM ユーザーの設定
ルートユーザ→Adominユーザ
* AWS アクセスの種類を選択(全部選択)
* アクセス許可の設定
→既存のポリシーを直接アタッチを選択
→AmazonECS_FullAccessを選択
* タグの追加 (不要)
* 認証情報(コンソールのサインインリンク保存)
* アクセス権限の追加
→既存のポリシーを直接アタッチを選択
→AdministratorAccess

## Fargateの設定
* リージョンを選択(東京)
* Elastic Container Service (ECS)を選択
* 2022/04時点では

元記事を表示

【Docker】Rails + Puma + Nginx + MySQL + React

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## Rails + Puma + Nginx + MySQL + React
“`docker-compose.yml
version: ‘${COMPOSE_VER}’
services:
db:
platform: linux/x86_64
build: ./docker/db
command: –default-authentication-plugin=mysql_native_password && bash -c “chmod +x /docker-entrypoint-initdb.d/00_grant.sh”
healthcheck:
test: mysqladmin ping -h db -u$${MYSQL_USER} -p$${M

元記事を表示

ActiveStorageで管理するファイルをCloudFront署名付きCookieで限定配信

## この記事について

[以前の投稿](https://qiita.com/zagvym/items/a4f0524c94007317ac95) で、ActiveStorage-S3によるダイレクトアップロードについて調査しました。
その際、併せて「S3にアップロードされた画像ファイルをCDN経由で配信する方法」を調査・検討したので、その記録を記事にしました。

なお、アップロードされたファイルは一般に公開せず配信先を限定する必要があったため、AWS CloudFrontの[署名付きCookie](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html)を利用して配信するようにしました。
そのシステム構成の概要と、Rails app側への改修例を記載します。

https://qiita.com/zagvym/items/a4f0524c94007317ac95

## 前提条件

まず、ユーザがプロフィール画像を任意にアッ

元記事を表示

OTHERカテゴリの最新記事