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

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

docker-compose版drone 1.10.1でRSpec + docker build & push + slack

# 概要と流れ

droneはクラウドではなく、自前でホストします。

※droneは情報も少なく、バージョンが新旧あって設定が混乱しますので、動いたやつを保存しときます。

まずは、droneの1.10.1のdocker-compose.yamlを作成します。これはどこかでホストし、ドメインを振って立ち上げとく。そして、githubのほうの設定をしとく(省略)。

この記事の.drone.ymlでdroneが動く流れとしては、githubのmaster( or main)にpushされたら(pull request mergeとか)、droneが起動してRSpecが動いて、NGならばslackされ終了。OKならば、docker buildの上dockerhubにpush、その結果OK/NG結果はslackされます。

それと、bundle installの結果を、ホストボリュームにキャッシュし、2回目からは速いという技を入れています。

本来なら、このあと、デプロイサーバのwebhookを叩いて、対象のインスタンスをdockerhubから更新して再起動すればいいのですが省略。

#

元記事を表示

[未経験エンジニア]のオリジナルアプリ制作の反省6. ランキング機能の実装(簡単)

# 今回書くこと
ランキング機能の実装の超簡単なやり方

## 環境
Ruby 2.6.5
Ruby on Rails 6.0.4.3

## 結論
[こちらの記事](https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4)を参考にデータの取得方法を工夫することで、結構簡単に実装できる。

##前提
記事にお気に入り機能を実装し、そのお気に入り数を参考してランキング機能を実装します。

テーブルとアソシエーションはこの通りです。

– **favoritesテーブル(誰かどの記事にお気に入りしたかを管理=中間テーブル)**
– **usersテーブル(ユーザーの情報を管理)**
– **articlesテーブル(記事の情報を管理)**

![the_brewers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948673/2fe78107-d13c-fc66-56f3-b6cc7224a3a4.png)

※(reviewsテーブルは今

元記事を表示

Rails + webpacker + Vueな環境にESLintを導入

webpacker install:vueをしている前提です。

### パッケージインストール

“`
$ yarn add -D eslint eslint-loader eslint-plugin-vue
“`

### Loaderを設定しenvironment.jsを編集

config/webpack/loaders/eslint.jsを作成し以下を記述

“`config/webpack/loaders/eslint.js
module.exports = {
test: /\.(js|vue)$/,
loader: ‘eslint-loader’,
enforce: ‘pre’,
options: {}
}
“`

“`config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)
const vue = require(‘./loaders/vue’)
const eslint = require(‘./loaders/eslint’)

元記事を表示

レスポンシブwebデザイン実装方法

#導入
レスポンシブデザインをポートフォリで導入したい方向けに記事を作りました。

#目標
 レスポンシブデザインを実装する

#viewportを設定する
“`views/layouts/application.html.erb

APPNAME
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
  #下記の一文を追加

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'

元記事を表示

【Rails 部分テンプレート(小学生でも分かる解説)】

#部分テンプレートとは#
「部分テンプレート」っていうのは、
`同じところをまとめておいて、それを使い回すやつ。`

例えば、
AくんとBくんとCくんがいる。
3人ともみんな、9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。

(「@」は、いったん気にしないで)

この時に、
「Aくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。
Bくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。
Cくんは9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」

これは、、長いしだるいしめんどいし、字で書くのも大変。

そこで、「9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」っていうところを「**こんな人**」と言い換える。

「こんな人」=「9歳で、男の子で、ゲームが好きで、マックの@ハンバーガーが好き。」

すると、
「Aくんは**こんな人**」
「Bくんは**こんな人**」
「Cくんは**こんな人**」

こんな短くできる。

#部分テンプレートの使い方#

Railsでの使い方は以下の感じ。

##①

元記事を表示

[Ruby on Rails] マイグレーションファイルをUpのまま消去してしまった時の対処法

***これはホントにあった怖い話です。**
マイグレーションファイルを間違って**Upのまま削除**した男がいました。
その男は怖くなってしまい、また新しくrails g modelコマンドで、
モデルとマイグレーションファイルを生成してしまいました。

そして男は無限に**エラー地獄**を彷徨うこととなったのでした。

 
**そんな男(自身)の失敗から学んだ事を書いていきます。**

結論から言うと、
マイグレーションファイルを**修正**したり、**削除**する際は、
必ず

rails db:rollback

で、**down**の状態でマイグレーションファイルを操作するようにしましょう。
まず、削除してしまったものはしょうがないです。

## 解決方法

**rails db:migrate:status**でステータスの確認をします。

**NO FILE**となっている**マイグレーションID**の番号をコピペして
手動で仮のマイグレーションファイルを作成します。
  

(例)
2343687287282_sample と作成します。

作ら

元記事を表示

Railsで釣り大会サイトを作ってみた!

# アプリの概要
![angler-app herokuapp com_ (1)](https://user-images.githubusercontent.com/61640081/107347167-e329a600-6b08-11eb-9460-7dddfd3c7616.png)

自分から大会を作成したり、気楽に釣り大会へ参加ができるアプリを作ってみました。
**時間と場所に縛られない自由な大会**がコンセプトです。

# 制作した背景

**1. 時間が限られた人でも気軽に参加できる大会で釣果を共有したい**
**2. 自分発信で大会を開催できるサイトが無い**

## 1. 時間が限られた人でも気軽に参加できる大会で釣果を共有したい
友人との会話の中で、釣り大会に出たいけど「今の時期、大勢の人が集まる場所はちょっと..」「大会って敷居が高そう」 「タイミングが合わない」「育児や仕事の都合で日中に釣りができない」と話していました。
釣りする時間帯に制限のある方にもマッチしやすい大会が作れたら楽しそうだな!!と考えました。

## 2. 自分発信で大会を開催できるサイトが無

元記事を表示

A server is already running

はじめに

パソコンが重くなってしまったり、接続不良でターミナルが動作しなくなってしまい、再度ターミナルを立ち上げると「A server is already running」という文字が表示されることがあるかと思います。
私自身も最近この現象に陥ることが多いため、まとめとして記録しておきたいと思います。

(参考記事)
・rails server -d でバックグラウンドで実行中のプロセスを停止する方法
https://qiita.com/Masaaki/items/6b29c2bb1a49107f2b73

ターミナル

“`terminal.
$ rails s
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options

A server is already running. Check /app/tmp/pids/server.pid.
“`

この現象は何か

アプリケーション

元記事を表示

rails docker webpacker Vue の設定

## bin/webpack-dev-serverするとコンソールにエラー出るよって時

3035番ポートがないよーってエラーが出ます、
dockerの設定で3035番ポートを通してあげましょう。

“`
ports:
– ‘3000:3000’
– ‘3035:3035’

“`
を設定して解決。

元記事を表示

Railsで週間いいねランキングを作る!

未経験からエンジニアへの転職を目指しています。
初投稿ですのでわかりにくい箇所があるかもしれませんがご容赦ください。

本題です。  
Railsでいいねのランキング機能を実装中に、週間いいねランキングも作りたいと思い実装しました。
※いいねランキングの実装は以下の記事を参考にしました
https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4

今回は週間いいねランキング(前週の月曜〜前週の日曜)を表示する方法を書いていきます。
モデル名等は適宜ご自身のものに置き換えてください。

# 前提
– 料理(cooks):いいね(likes)=1:N
– いいね機能の実装は完了している

# モデルにメソッドを定義

“`ruby:cook.rb
def self.last_week # メソッド名は何でも良いです
Cook.joins(:likes).where(likes: { created_at: 0.days.ago.prev_week..0.days.ago.prev_week(:sunday)}).group(

元記事を表示

Ruby on Railsの原則を具体例を用いて解説

# CoC ~Convention Over Configuration~

>今回も以前紹介した[Ruby on Railsの原則](https://qiita.com/iamu_TECH_CAMP/items/0d0c9686a651b009f7a1#ruby-on-rails%E3%81%AE%E5%8E%9F%E5%89%87)に関する内容を深ぼっていきます。

**CoC**とは実際にどの様な場面で用いられているのか…

>[Convention Over Configurationの略]
「設定よりも規約を優先する」

ここでいう`規約`とは、
`Railsがあらかじめ決めているルール`のことを指します。
ゼロから`自身で設定するのではなく`「設定よりも規約を優先」して作業するという捉え方で問題ないようだ。

## 具体例

Ruby on Railsを使って開発を進めてきて

>「コマンドだけで`Railsが自動で`ファイルなどを生成してくれた」
「`Railsが勝手に`処理を用意してくれていた」

なんていう経験をしてきたと思います。
まさにソレが`「設定よりも規

元記事を表示

【Rails】画像プレビュー機能実装【初心者向け】

#目標
下記デモのような、画像プレビュー機能を実装する
![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771476/3e37317c-8d84-1c22-cd1b-051be9825c19.gif)

#前提
* 既に画像を表示、登録できる状態であること
私は、`gemのrefile`を使用して実装しています。

#実装
ソースコードは下記の通りです。
解説は、丁寧にやっていきます!

“`ruby:new.html.erb
…..

<%= f.label :"スタジオ写真" %>
<%= f.attachment_field :studio_image, id: "image" %>
<%= attachment_image_tag @studio, :stu

元記事を表示

Tips: RougeにDiffシンタックスとと各言語のシンタックスを一緒にかけるLexerを追加する

コードのシンタックスハイライトを行うgemとして、[Rouge](https://github.com/rouge-ruby/rouge)が有名だと思います。
RougeにはDiffのシンタックスはありますが、Diffと各言語のシンタックスを同時に適用することができないので、それを実現するためのTipsを紹介します。

実は実現する方法は[Rouge内のIssue](https://github.com/rouge-ruby/rouge/issues/642)で議論されていました。これを使って作ってみます。

まずは1つのLexerに対してDiffの指定も行えるようにしてみます。

“`ruby:rubyの場合(Rouge::Lexers::Rubyはロードしている前提)
module Rouge
module Lexers
class DiffRuby < Ruby prepend :root do rule(/^\+.*$\n?/, Generic::Inserted) rule(/^-+.*$\n?/, Generic::

元記事を表示

【Rails】Rspecで、deviseのsingn_inを使ってログイン処理を書く

#目標
requestテストで、deviseのヘルパーを使ってログイン処理を書けるようにする

#前提
* 既にRspecでテストを1件以上実行できる
ログイン処理どうすればいいの?が、メインテーマなのでRspec導入部分などは割愛します。

#本題の前に
まず、私はRspecで、model, system, requestの大きく3つに分けてテストを記述しました。その中で、systemテストでのログイン処理をどうしたのかを簡単に書いていきます。

#systemテスト
systemテストでは、機能のテストを記述しました(ボタン押したら期待通りの結果になるかとか)。この時のログイン処理は、ヘルパーメソッドを定義して使いました。
導入方法は下記の記事を参考にしました。
[【Rails】Rspecでマクロを定義して処理を共通化する方法](https://qiita.com/matsubishi5/items/6df9f14e5daa5e0dc1c8)

で、結果が以下の通りです。

“`ruby:spec/support/helper_macros.rb

元記事を表示

【Railsチュートリアル】第6章 ユーザーのモデルを作成する②

# 【Railsチュートリアル】第6章 ユーザーのモデルを作成する

**本章の目的**:一番重要なステップであるユーザー用のデータモデルの作成と、データを保存する手段の確保について学んでいく。

## 6.2 ユーザーを検証する

**本節の目的**:検証(Validation)を実装する。

**検証(Validation)**とは?
nameを空にしない、emailはメールアドレスのフォーマットに従う、というように何らかの制限を課すことができるActive Recordの機能。

**よく使われるケース**
存在性(presence)、長さ(length)、フォーマット(format)、意性(uniqueness)、確認(confirmation)

### 6.2.1 有効性を検証する

**検証方法**

1. 有効なモデルのオブジェクトを作成
2. その属性のうちの1つを有効でない属性に意図的に変更
3. バリデーションで失敗するかどうかをテスト

“`ruby:test/models/user_test.rb

require ‘test_helper’

class

元記事を表示

Rails6にインストールしたActiveStorageを削除する方法

## はじめに
コンパイルしたときにこのエラーが出た

“`
ModuleNotFoundError: Module not found: Error: Can’t resolve ‘@rails/activestorage’
“`

ActionStorageをアプリ内で使用してないから消そうと思った時のログを書いていきます

## 方法

config/application.rb内にrequireされているものをコメントアウト

“`ruby
require “rails”
require “active_model/railtie”
require “active_job/railtie”
require “active_record/railtie”
# require “active_storage/engine”
require “action_controller/railtie”
require “action_mailer/railtie”
# require “action_mailbox/engine”
# require “action_text/eng

元記事を表示

Unknown MySQL server host ‘db’ (-3) の対処方法

プログラミング初学者です。
DockerでRails 6.1とMySQL 8.0の環境を構築しようとしていたらエラーにハマりました。

docker-compose run web rails db:create
を実行した際
Unknown MySQL server host ‘db’ (-3)
という発生したエラーの対処方法です。

Youtubeで[山浦清透](https://www.youtube.com/channel/UC452hry4DI_pDn_CVT9ZKhQ)さんの
[【Docker超入門 #7】Docker ComposeでRailsを構築しよう](https://www.youtube.com/watch?v=ltDdZAJli8c&list=PLs3eD4QT7ow6O5wyRRnRCvB7JMuq_D3-D&index=8)
を実践中にエラーが発生しました。

実行環境は
[【Docker超入門 #2】環境構築 for Windows](https://www.youtube.com/watch?v=LSQKHW01ACo&list=PLs3eD4QT7ow

元記事を表示

AWS EC2へsshでのログインができなくなった時の対処法

# 結論
ec2インスタンスの再起動で解決できた

# 解決までの道のり

### なんでログイン出来なくなった?

ec2内にアプリケーションをコンパイルしているときに、時間がかかりすぎて、途中でサーバーがタイムアウトになった。

再度sshログインしてみる

動かないままタイムアウトしてしまう。

### とりあえずデバックモードで起動してみた

-vをつけると、デバックモード

“`
% ssh 自分のkey -v
“`

“`
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/wadakazuma/.ssh/config
debug1: /Users/wadakazuma/.ssh/config line 1: Applying options for key_berlin_now_rsa
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Ap

元記事を表示

Chartkickを使って、グラフを作成してみた

## はじめに
Chartkickというgemを使うと、簡単にグラフが作れてしまうらしいので、実験的に使ってみる事に。

## 環境
Ubuntu16.04.7 LTS
Windows10 + Vegrant
Rails 5.2.4
Ruby 2.5.1

## 手順

Gemfileに2つのgemを追加します。

“`Gemfile
gem ‘chartkick’
gem ‘groupdate’
“`

“`
$bundle install
“`

application.jsに2つのjsを追加します。

“`application.js
//= require chartkick
//= require Chart.bundle
“`

適当にコントローラを作成します。show1とshow2と2つメソッドを作成したのは、それぞれ異なるグラフを表示させるためです。

“`
$rails g controller asagaos index show1 show2
“`

適当にモデルを作成します。(朝顔の成長記録を想定したデータを登録するため、このようなモデルにしまし

元記事を表示

【Rails】Deviseメール文面の変更が反映されない時の対処法

# 結論

以下のコメントアウトを外して、「true」にする

“`ruby:config/initializers/devise.rb
# config.scoped_views = false
config.scoped_views = true
“`

# これで解決する理由

(※解決しない人は、これに当てはまっていない可能性があります。)

– Deviseにnamespaceを設定していた(devise/`users`/mailer)
– Deviseはデフォルトで「devise/mailer」以下のメール文面を見に行く
– 上記の記述を書くことで、namespaceを認識するようになる

元記事を表示

OTHERカテゴリの最新記事