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

Rails関連のことを調べてみた2021年12月07日
目次

Ruby ハッシュ 基本を復習

ハッシュの中身は

hash = { キー:値 }

hash = {key:value}

です。

中にいくつかのキーと値があるとして

hash = {key1:value1,key2:value2,key3:value3}

それらをオブジェクト.keysつまりこの場合では、puts hash.keysで

key1

key2

key3

と出力されます。

valueにもあり、puts hash.valuesで

value1

value2

value3

 出力されます。

元記事を表示

【備忘録】デプロイ関連でエラーが起きたとき(反映されない場合も)の対処法

## デプロイ時に何らかの原因で反映がされない場合の対処法
### ①unicorn を見てみる
本番環境でunicornを見てみる。

“`
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ ps aux | grep unicorn
“`

“`
ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep –color=auto unicorn
“`

“`
[ec2-us

元記事を表示

Railsで使えそうな処理のメモ書き

気が向いたらメモを追加していく

### モデルクラス一覧取得
ファイル名からクラスを取得してモデルのやつだけ集める(参考[^1])

“`.rb
constants = Dir.glob(File.expand_path(“./app/models/*.rb”, Rails.root)).map do |f|
name = File.basename(f, “.rb”).camelize
Object.const_get(name)
end
models = constants.filter |constant| do
constant.instance_of?(Class) && constant< ActiveRecord::Base && !constant.abstract_class? end ``` [^1]: https://kitak.hatenablog.jp/entry/2013/11/10/195254

元記事を表示

ECS/fargateでタスクが終了してしまう場合のデバッグ方法【Rails】

# はじめに

RailsアプリをEC2からECS/fargateに移行するに当たり、
なかなかタスクが起動できませんでした。

その大きな要因は
**`タスクが終了してしまうエラー原因`**を
**`AWSコンソール画面やCLIでどうやって確認するか`**が
分からなかった為でした。

という訳で、自己整理用に
**`ECS/fargateはどうデバッグしていけば良いか`**をまとめています。

# 使用技術
* AWS(ECS/Fargate)
* Rails6(Ruby2.7)
* MySQL8

# エラー確認方法
1. マネジメントコンソールのECS画面を確認する
2. マネジメントコンソールのCloudWatch画面を確認する
3. コンテナに接続後、Railsの本番用ログを確認する

# 1. マネジメントコンソールのECS画面を確認する

AWSマネジメントコンソールのESC画面に表示されるエラー文から
タスクが停止してしまった原因を確認する方法です。

では、以降はコンソール画面を参照しながら説明します。

まず、AWSの提供サービスからECSを検索します。
!

元記事を表示

【Rails】OpenSSLが1.1.1なのにLet’s Encryptの証明書でverify errorが発生する

2021年9月30日に発生した、Let’s Encryptのルート証明書の切り替え問題。
Amazon Linux1(OpesnSSL 1.0.2)上で稼働する弊社のRailsアプリケーションもしっかり影響を受けました。
AWSから対応方法についてアナウンスがあったのでその手順に従ってみたものの、イマイチうまくいかず、、、

そこで、ちょうどインスタンスをUbuntu20.04(OpesnSSL 1.1.1)に移行させる予定があったため、
Ubuntu上で稼働するようにアプリケーションを調整して入れ替えれば解決!
と思いきや、依然としてverify errorが発生。

以下は、Ubuntu上で奮闘した対応の記録です。

### 環境
– Amazon Linux1(OpesnSSL 1.0.2)
– Ubuntu 20.04(OpenSSL 1.1.1)
– Ruby 2.5.1
– Rails 6.0.3.6

## OpenSSLのアップデートを試みる
OpenSSLのバージョンが低いと問題が起こるらしいので、バージョン1.1.1といえどアップデートしてみる。

“`bash

元記事を表示

【Rails】ユーザーの状態に応じた対話機能をLINEbotで実現する【LINE Messaging API】

# 概要

本記事は [RUNTEQアドベントカレンダー 2021](https://qiita.com/advent-calendar/2021/runteq) の7日目の記事となります!

個人開発で**ゴミ捨て日を通知してくれるLINEアプリ**を開発したのですが、
その中で実装するのに苦労した「**ユーザーの状態を把握する**」方法を記事にします。

一般的なRailを使用したWebアプリケーションでは、Cookieを利用したユーザー識別やフォームを利用してユーザーの送信する内容を一挙に受け取るなどができますが、LINE Messaging APIではこれらが使えません…

そこで私が実装した、Railsのみでユーザーの状態を保持する方法を紹介します。

これからRails x LINE Messaging API を試してみたい方の参考になれば幸いです。

※ LINE Developperへの登録や設定、基本的な実装についての概要などは他に多数の素晴らしい記事があるため、割愛させていただきます。([こちらの記事](https://qiita.com/Tsuchiy_2/

元記事を表示

DB破壊日記 ~間違えてmigrationファイル消しちゃった編~

#はじめに

こんにちは!!!!!!
[DMM WEBCAMP Advent Calendar 2021](https://qiita.com/advent-calendar/2021/infratop) 7日目を担当します、@tamakiharuNNです!
初Advent Calendar! 初Qiita! です!

チームのアドベントカレンダーのテーマが
「**プログラミングを始めたばかりの人もわかる、ハンズオンや言語基礎**」
ということで
自分がプログラミング始めたての頃に何に困ったっけ~?と考えました。

すぐに見つかりました。
###DB破壊です。
rollbackしてmigrationファイル修正したり(rollbackは適切にやれば問題ありません)
status変更する前にmigrationファイル削除したり

始めた当初は何をしたらどうなるかわからず、
とりあえずやってみよう、壊れたら作り直そ~の精神でハチャメチャやってました笑
(**チーム開発では取り返しがつかなくなるので良い子はマネしないように!**)

というわけで今回は
Railsを始めたての頃の自分に教える

元記事を表示

新卒エンジニアが半年でQiitaを完全に理解する話~バックエンド編~

Qiita Advent Calendar 2021 の 7 日目は、Qiita株式会社 プロダクト開発グループ プラットフォーム開発チームの山田 ( @wataru86 ) が担当します!

https://qiita.com/advent-calendar/2021/qiita

# あらすじ

あるところに Haskell や TypeScript 等の静的型付け言語ばかり書いていたエンジニア見習いがいました。

そんな彼がQiita株式会社(旧Increments株式会社)に新卒入社し、Qiitaを開発するエンジニアとして成長していく様子を、Ruby on Railsに関するちょっと便利なTipsを添えながらお送りいたします。

## 対象読者

– Ruby on Rails初心者
– これから新卒エンジニアとしてWeb系の企業に入社する人
– Rails未経験の新卒を教育をする予定の人
– Qiitaの新卒エンジニアが気になる人

# 第1話「Rails完全に理解した」

内定を承諾し、就活が無事に終わった安心も束の間、入社後うまくやっていけるか不安になっていた僕は、少し

元記事を表示

【Rails】ストロングパラメーターの使い所について【初学者の疑問点を簡潔に解説】

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

## 今回の疑問点
 今回の疑問点は、

  _ストロングパラメーターの使い方について_
 
 です。 

 ストロングパラメーターが必要なタイミングについて疑問を抱きました。
## 疑問点についての解説

###結論
 マスアサインメント機能を使用した場合にストロングパラメーターの記述が必要。特定のカラムやデータを明示してパラメーターを受け取る場合などには記述する必要はない。

###ストロングパラメーターとは
 ストロングパラメーターとは、Mass Assignment脆弱性の対策として、開発者が指定したキーを持つパラメーターのみを受け取れるように制限するものです。指定していないキーを持つパラメーターをエラーとして弾くことができます。

###パラメーターとは
 パラメーターとは

元記事を表示

railsチュートリアル第十三章 マイクロポストの画像投稿

##マイクロポストの画像投稿
画像付きマイクロポストを投稿できるようにしてみます。
画像アップロード機能を追加するためには、2つの視覚的な要素が必要です。
1つは画像をアップロードするためのフォーム、
もう1つは投稿された画像そのものです。

###基本的な画像アップロード
Railsに組み込まれているActive Storageという機能を用いることです。
Active Storageを使うことで画像を簡単に扱うことができ、画像に関連付けるモデルも自由に指定できます。
平文テキストはもちろん、PDFファイルや音声ファイルといったさまざまなバイナリファイルも扱えます。

“`
$ rails active_storage:install
“`
“`
$ rails db:migrate
“`

####Micropostモデルに画像を追加する
app/models/micropost.rb

“`rb
class Micropost < ApplicationRecord # ApplicationRecordを継承したモデルが作られます belongs_to :user

元記事を表示

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

###マイクロポストを削除する
マイクロポストリソースにポストを削除する機能を追加.
これはユーザー削除と同様に、”delete” リンクで実現します
今回は自分が投稿したマイクロポストに対してのみ削除リンクが動作するようにします。

####マイクロポストのパーシャルに削除リンクを追加する
app/views/microposts/_micropost.html.erb

“`html

元記事を表示

railsチュートリアル第十三章 フィードの原型

###フィードの原型
今の段階では投稿した内容をすぐに見ることができません。
Homeページにまだマイクロポストを表示する部分が実装されていないからです。

####マイクロポストのステータスフィードを実装するための準備
app/models/user.rb

“`rb
.
.
.
# 試作feedの定義
# 完全な実装は次章の「ユーザーをフォローする」を参照
def feed
# すべてのユーザーがフィードを持つので、feedメソッドはUserモデルで作るのが自然です
Micropost.where(“user_id = ?”, id)
# whereメソッド テーブル内の条件に一致したレコードを配列の形で取得することができるメソッド
# user_idを条件として取得することができる。
# 上の疑問符があることで、SQLクエリに代入する前にidがエスケープされるため
# 、SQLインジェクションと呼ばれる深刻なセキュリティホールを避けることができます。
# SQL文に変数を代入する場合は常にエスケープする習慣をぜひ

元記事を表示

scope

###scopeとは
Railsのスコープ機能を利用するためのメソッド。
スコープ機能というのは、クエリを定義することができる機能で、何度も同じクエリを使うような場合に、メンテナンス性を上げることができる。

**◆出来ること**
・並べ替えや絞り込みを行う
・クエリを定義して使い回す

>**クエリとは?**
 データベースに対する命令文。
 find_by、where、order、limit、distinctなど

###scopeの基本構文

“`
class モデル名 < ApplicationRecord scope :スコープの名前, -> { 条件式 }
end

定義したスコープは以下のように呼び出す事が出来る
モデル名.スコープ名

例:
class Blog < ApplicationRecord scope :published, -> { where(published: true) }
end

Blog.published
“`

###参考記事
[【Rails入門説明書】scopeについて解説](https://web-camp.io/ma

元記事を表示

has_many :through 关联

has_many :through 关联经常用于建立两个模型之间的多对多关联。这种关联表示一个模型的实例可以借由第三个模型,拥有零个和多个另一模型的实例。例如,在医疗锻炼中,病人要和医生约定练习时间。这中间的关联声明如下:

元記事を表示

has_many :through 关联

has_many :through 关联经常用于建立两个模型之间的多对多关联。这种关联表示一个模型的实例可以借由第三个模型,拥有零个和多个另一模型的实例。例如,在医疗锻炼中,病人要和医生约定练习时间。这中间的关联声明如下:

元記事を表示

デモ動画の撮影からREADMEへの挿入まで【Github】

エンジニアに転職するべく Railsの勉強を始め、ポートフォリオとしてRailsを用いたWebアプリを制作しました。
自分の制作したアプリの使い方を直感的にアピールするためにデモ動画をREADMEに挿入してみたので手順をまとめます。

# 1. QuickTimePlayerのインストール
自分のOSに合わせたバージョンをインストールします。

# 2. 撮影
まずQuickTimePlayerを選択→新規画面収録クリック
![スクリーンショット 2021-12-06 14.10.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293293/1958f146-2d6a-bf16-add1-ee1481426ed8.png)

その後出てくる画面で選択部分を収録を選択→収録をクリック
で見てほしい画面だけを切り取って撮影が始まります。

#3. ffmpegを使ってmovからgifへ変換
ffmpeg(エフエフエムペグ)とは動画と音声を変換するためのフリーソフトウェアです。
homebrewを使って

元記事を表示

ゲストハウス支配人からエンジニアになってみて

####はじめに
ゲストハウススタッフからエンジニアになってみて、というテーマでお話しさせていただきます。

####前職について
エンジニア転職する前は、都内のゲストハウスの支配人として勤務をしておりました。
ゲストハウスとはドミトリーと呼ばれる相部屋の部屋がメインの宿泊施設です。
宿泊代がホテルに比べると安く、また1階がカフェ・バーになっており初めてのお客様同士でも話しやすい雰囲気のため、世界中から来る宿泊客で賑わっていました。…コロナ前までは(苦笑)。

####エンジニアになろうと思ったきっかけ
元々私は文系の大学出身でしたし、エンジニアになるなんて微塵も考えたことはありませんでした。
しかしゲストハウスの運営をしていると、パソコンひとつ持って世界中を旅しながら仕事をしている人に出会うことも多く、彼らの話を聞いていると大抵エンジニアだったりデザイナーとして働いているとのことでした。ただそれでも羨ましいと思いつつも自分には出来ないことだと思っていました。

少し話は飛びますが、長年勤めているとトラブルや施設の故障などに度々出くわします。
私の勤めていたゲストハウスは大手でもな

元記事を表示

既存のrailsにvueを取り込んで、自作vueファイル(コンポーネント作成)

“`

bundle exec rails webpacker:install:vue
“`

を実行

<%= javascript_pack_tag 'hello_vue' %>
<%= stylesheet_pack_tag 'hello_vue' %>
をかいたらhello_vueが表示された

# 次は自作コンポーネントを表示してみる

“`apps/javascript/packs/components/mindmaps.vue

“`

“`js/packs/mindmaps.js

import Vue from ‘vue’
import mindmaps from ‘../packs/components/mindmaps.vue’

document.addEventListener(‘DOMContentLoaded’, () => {
var app = new Vue({
el: ‘#mindmaps’,
components: {

元記事を表示

[初心者] Railsでyoutube APIを使って検索機能を実装してみた

##はじめに

ポートフォリオ作成をするにあたりyoutube APIを使い、検索機能を追加したく、実装してみました。
不慣れで読みにくいかもしれませんが何卒ご了承ください。

YouTube APIは取得しているものとします。

主にこちらの記事を参考にしています。
[Railsでyoutube APIを使ってみた](https://qiita.com/sakakinn/items/46c0d4945e4646f346f6)
大変お世話になりました?‍♂️

##開発環境

Rails:6.1.4
Visual Studio Code:1.61.2

##実装してみる

“`ruby:youtube.controller
class YoutubeController < ApplicationController GOOGLE_API_KEY = ENV["API_KEY"] def find_videos(keyword, after: 1.months.ago, before: Time.now) service = Google::Apis::Youtu

元記事を表示

【Rails×AWS】yamlファイルにおける’please note that yaml must be consistently indented using spaces’の解決

https://qiita.com/gyu_outputs/items/b123ef229842d857ff39
こちらの記事を参考にrailsアプリをawsにデプロイする過程で発生したエラーに関する備忘録です。

#エラー詳細

ページトップに添付した記事の中の「credentials.ymlの設定」の箇所で直面したエラーです。

“`credentials.yml
db:
database: アプリ名
username: root
password: 設定したPW
socket: /var/lib/mysql/mysql.sock

“`

credentials.ymlを記述した後に、

“`database.yml
production:
<<: *default database: <%= Rails.application.credentials.db[:database] %>
username: <%= Rails.application.credentials.db[:username] %>
password: <%= Rail

元記事を表示

OTHERカテゴリの最新記事