Rails関連のことを調べてみた2020年01月22日

Rails関連のことを調べてみた2020年01月22日
目次

docker-compose up出でるエラー

#概要
いつものようにDocker-compose upするとサーバーが立ち上がらない。

具体的には、↓こんな感じでエラーが出ている。

スクリーンショット 2020-01-11 23.34.02.png

〈注意すべきポイント〉
**bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
Bundler::GemNotFound: Could not find ast-2.4.0 in any of the sources**

#解決策
**docker-compose build**
で解決!!

#原因(ここ重要!)
原因によっては対処法が変わってくる。
今回の場合は、前回このアプリを利用した時にgemを追加して
bund

元記事を表示

Twitter APIで取得したアイコン画像の大きさを変える【Ruby on Rails】

#はじめに
TwitterAPIの取得にomniauthを使っています。
またomniauthの基本的な使い方については省略しています。
omniauthの基本的な使い方については別記事を参照してください。

###開発環境
Ruby 2.6.1
Ruby on Rails 6.0.1
#Twitterアイコン画像を取得する

“`ruby:app/controllers/twitter_controller.rb
class TwitterController < ApplicationController # 基本的なomniauthの使い方は省略 def twitter auth_hash = request.env["omniauth.auth"] @image_url = auth_hash[:info][:image] end end ``` このままでは**48x48にリサイズされたアイコン画像のURL**を取得してしまいます。 小さい!当然CSSなどで拡大してもボヤボヤになってしまいます。 #大きなTwitterアイコン画像の取得方法 om

元記事を表示

【Rails】 DataTables 検索結果の保持方法

# はじめに
これまでに Rails + DataTable 関連の記事を書いてきましたが、別のページから戻ってきた時に検索結果を保持していて欲しいなどのユーザーの要望があるかと思いますので、そのような細かい設定の変更方法について今回はまとめさせていただきます。

#### 関連リンク
関連リンクを下記に載せておくので、必要であれば参考にしてください。。

* 【Rails】 DataTables 実装方法
* https://qiita.com/syukan3/items/5ac9f0d1b43334b5eb13
* 【Rails】 DataTables 動的にカラムを変更する方法
* https://qiita.com/syukan3/items/83c4ecd351db57911943

# 検索結果の保持方法
次の2つを設定するだけで、検索結果を保持してくれるようになります。

* stateSave
* stateDuration

“`coffeescript:app/assets/javascripts/concern/datatables.cof

元記事を表示

RSpec で ある要素のみが入った配列かどうかを確認したいときは contain_exactly を使う

# 概要
a,b,c のリソースがあるときに、a,c のみが順番は関係なく返されることをテストしたいときには、contain_exactly が便利です。

# コード

“`
let!(:user_a) { create(:user, name: ‘a’) }
let!(:user_b) { create(:user, name: ‘b’) }
let!(:user_c) { create(:user, name: ‘c’) }

it ‘returns ac users do
expect(User.hoge).to contain_exactly(user_a, user_c)
end

“`

順番もテストするときは素直に eq matcher で配列を使う。

“`
it ‘returns ac users do
expect(User.hoge).to eq [user_a, user_c]
end
“`

参考:
`contain_exactly` matcher
https://relishapp.com/rspec/rspec-expectations

元記事を表示

自動デプロイ(Capistrano)でエラー mkdir: ディレクトリ `/var/www’ を作成できません: 許可がありません

Capistranoで自動デプロイをしていると、エラーが発生しました

[![Image from Gyazo](https://i.gyazo.com/f7642507c5e1ffe6c8bc8133fdc66d9e.png)](https://gyazo.com/f7642507c5e1ffe6c8bc8133fdc66d9e)

テキストだと下記ですね

“`
mkdir stdout: Nothing written
mkdir stderr: mkdir: ディレクトリ `/var/www’ を作成できません: 許可がありません
mkdir: ディレクトリ `/var/www’ を作成できません: 許可がありません
“`

このエラー”var/www/アプリ名”のディレクトリにしている場合は、パーミッションの問題等だと思いますが、、、

###「 ”var/www/アプリ名”使ってないんですけど!!!
 なんでエラーが出るんだよ!!!
 ”www”が気に食わないから、別のフォルダ名にしてるんですけど!!!
 他の記述も確認したけど、全部”var/www/アプリ名”書

元記事を表示

Capistranoによる自動デプロイエラー(Rails):Missing encryption key to decrypt file with. Ask your team for your master key and write it to

# 手動デプロイできたのに、自動デプロイができない!!!

そんでもって、master.keyがないエラーが表示されるんですけど、どうすればいいんだ!!!

となる方いると思います。

下記をすれば改善するので、早速取り組みましょう

## Master.keyがないエラー( Missing encryption key to decrypt file with. Ask your team for your master key and write it to )
このエラーが表示されたということは、『 本番環境にあるmaster.keyをうまく読み込めていない 』ことを意味します。

“`
rake stdout: Nothing written
rake stderr: Missing encryption key to decrypt file with. Ask your team for your master key and write it to /var/○○○(アプリを格納しているディレクトリ名)/○○○(アプリ名)/releases/20200121124

元記事を表示

【Rails】devise実装後のユーザー新規登録時のエラー[ArgumentError in Users::RegistrationsController#create]

#概要
Railsアプリにて、ログイン機能を実装するために`gem ‘devise’`を利用。
users/sign_upからユーザーの新規登録を行ったところエラーが発生した。

# エラー文
“`ruby
ArgumentError in Users::RegistrationsController#create

wrong number of arguments (given 0, expected 1)

app/controllers/users/registrations_controller.rb:13:in `create’

def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: ‘User was successfully created.’
else
render :new
end
“`

`wrong number of arguments (given 0, expected 1)`は
引数が1

元記事を表示

[Welcome to nginx on the Amazon Linux AMI!]nginxサーバにアプリケーションをアップロードした時に起こるルーティングエラーの解決例

#1.エラーの様子
まずエラーまでの流れですが、ローカル環境でエラーもなく、GitHubへのcommit,pushをし、EC2サーバー(nginx)上に自動デプロイが終わった後にElastic id(個人のipアドレスに紐付け済みの公開用ipアドレス)に接続したところ下記のような画面が表示されました。

<出てきたエラー文>
スクリーンショット 2020-01-21 21.34.57.png

<出て欲しい画面>
スクリーンショット 2020-01-21 22.05.09.pngMVCとはなんなのか

Ruby on Rails初心者として、自分自身の理解を整理したいのでまとめたいと思います。
何か認識違いがあれば、ご指摘いただければ幸いです。

# MVCとは
UI(ユーザインタフェース)を持つソフトウエアのアーキテクチャの一種。
画面に表示する部分(UI)は、アプリケーション固有のデータや処理の扱いの性質が異なるため、画面の表示とアプリケーションのデータに関する部分を混ぜて記述してしまうと、コードが複雑化してしまい、保守性が悪くなってしまいます。

そこで、アプリケーション固有のデータの部分、画面を表示させるUIの部分、この2つをつなぎ合わせる制御の部分の3つに分けて管理をしやすくしようというものです。

###M(model)
アプリケーション固有のデータや処理の扱いの部分
・データベースへの保存、読み込み、永続化を担当する。

### V(View)
UIに関わる部分
・HTTPレスポンスの中身を実際に組み立てて、画面を表示する。

### C(Controller)
ModelとViewを統合的に制御する部分
・ブラウザからのリクエストを受けて適切なレスポンスを作成するため

元記事を表示

docker環境で db:migrate:resetしたいとき( seed_fuも)

###dbをリセットしたいとき
dockerを触り始めたばかりのときは停止させたdockerを再起動するのにも手こずりますので初歩的な手順。
大体rails のコマンド前にdocker-composeをつけるだけですが。

“`
docker-compose exec コンテナ名 bin/rails db:migrate:reset
“`

コンテナは停止させなくて良いです
なぜならそのコンテナに対してmigrateリセットするからです

“`
docker-compose exec コンテナ名 bin/rails db:migrate
“`

“`
docker-compose exec コンテナ名 bin/rails db:seed_fu
“`

docker-composeのときはymlファイルを参照するのでコンテナIDではなくコンテナ名を記述してください。

元記事を表示

[Ruby on Rails] resourcesの使い方について

resourcesに慣れないので理解することを目的に個人のメモとして残します

#環境
OS:Windows10
Rubyバージョン:ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
Railsバージョン:Rails 5.2.4.1

#resourcesの使い方
“`ruby:routes.rb
Rails.application.routes.draw do

resources :tests

end
“`
上記のようにroutes.rbでモデルを選んで宣言

#resourcesの機能
– 複数のCRUD処理に関わるルーティングを設定する(下記の表参照)
– いくつかのURLと同値である簡潔な文字列が使用できる

|URLと同値な文字列|httpメソッド|URL|コントローラー|アクション|
|:————–:|:———:|:–|:———-:|:——–:|
|tests|GET|/tests|tests|index|
|tests|POST|/test

元記事を表示

CodeCommit + CodeDeploy + CodePipelineでEC2にデプロイ~CodeDeployの設定~

| 目次 |
|:——————|
| 1. [CodeCommitの設定](https://qiita.com/k_senbei/items/dd1b912debfa38136b9d) |
| 2. CodeDeployの設定(この記事) |
| 3. [CodePipelineの設定・デプロイ実行](https://qiita.com/k_senbei/items/f748f5a30414696ac645) |

AWSのCodeCommit、CodeDeploy、CodePipelineを組み合わせてEC2にデプロイするまでをまとめました。
この記事ではCodeDeployでデプロイアプリケーションを作成する手順を説明します。

## 前提

* デプロイ先のEC2インスタンスは作成済みとします。
* ELB(ロードバランサー)はApplication Load Balancerを使用する想定とします。
* Ruby on Railsアプリケーションをデプロイする想定とします。
* EC2 : Amazon Linux2

## Co

元記事を表示

`create_or_find_by` はユニーク制約が定義されたテーブルで効いてくる

以下の記事で `find_or_create_by` と `create_or_find_by` の違いについてコメントしたのですが、投稿元の方から反応が無かったので別記事として投稿することにしました :pray:

[「find\_or\_create\_by」と「create\_or\_find\_by」 の違い \#Railsのコードを読んでみた \- Qiita](https://qiita.com/4geru/items/e9c6545eb211124f153d#comment-3bcfa66521e94c76b963)

> find_or_create_by でできないカラムもcreate_or_find_byではできてしまう可能性があります。
>
> 例えば、Userモデルがあったとします。create_or_find_by ではcreateが先に実行されるため2つ同じようなデータが作られます。
find_or_create_byでは、findが先に実行されるため、検索結果が返され、同じデータは2つ作られることはありません。

意識して使用しないとそのような動

元記事を表示

[rails] 投稿一覧にユーザー情報を表示

#始めに
今回、プロゲートと違う方法で投稿一覧でユーザー情報を表示します。

プロゲートでrailsを終えてからよく、ツイッター風アプリを作成すると思います。
そこで、プロゲートのコードをコピペすることは誰でも出来ますが、
重要なのは**理解して自分でコードを書くこと**だと思います。

他のやり方で表示することが出来たので、参考やヒントになれば嬉しいです。

###完成イメージ
スクリーンショット 2020-01-21 17.00.44.png
※注:デザインは今回しません。また、分かりやすく理解してもらうために**ユーザー情報は名前だけ**にします。

#前提
・usersテーブルと投稿用のテーブル(今回はcommentsテーブル)があること。

#MVC(model/controller/view)の設定
#

元記事を表示

【Rails】enumを使用したセレクトボックスの実装とDBへの保存

# はじめに
都道府県などのプルダウンメニューを作成する際、enumを使いました
これを使うことで都道府県などのデータをわざわざテーブルとして用意する必要がなくなります
便利だったのですが、DBへの保存の際に型が合わないなどの問題も発生したのでまとめておきます

# 環境
Ruby: 2.5.1
Rails: 5.2.4

# 実際の操作
実際の操作は以下のようになります

1. 該当カラムをinteger型で作成
2. モデルにプルダウンメニューで表示させるもの一覧を記載
3. ビューで表示させるプルダウンの記述
4. 入力したフォームの受け取り型を編集

#### 1. 該当カラムをinteger型で作成
下記の場合は都道府県です

“`ruby:schema.rb
t.integer :prefecture, null: false
“`

#### 2. モデルにプルダウンメニューで表示させるもの一覧を記載

“`ruby:models/address.rb
enum prefecture: {
北海道:1,青森県:2,岩手県:3,宮城県:4,秋田県:

元記事を表示

Rails 6+Grapeで作るAPIサーバーにDeviseトークン認証を付ける

# はじめに

iOS・AndroidアプリやWebアプリをクライアントとしたAPIサーバーをRuby on Railsで実装するケースがあります。この記事では、[Grape](http://www.ruby-grape.org/)(REST APIフレームワーク)を利用して作るAPIサーバーに[Devise](https://github.com/heartcombo/devise)(認証機能を提供するgem)を組み合わせ、アクセストークンを介した認証方式を実装する手順を紹介します。

# 同様の紹介事例について

[Devise + Grape で認証付きAPIの実装 – Qiita](https://qiita.com/travelist/items/ec0b08a9a19cbe9ec78b)

上記の記事では本記事と同様に、GrapeとDeviseに加えてトークン認証機能を付加するgemである[devise_token_auth](https://github.com/lynndylanhurley/devise_token_auth)を用いて実装する手法が紹介されています。た

元記事を表示

HerokuでRailsタスクを定期実行する方法(Google Apps Scriptのトリガーを使う方法)

HerokuにデプロイしたRailsアプリでタスクを定期実行する方法を紹介します。
ここで示す方法は、Google Apps Script (GAS)を使う方法です。

結論を先に述べると以下のようにします:
1. Railsタスクを作成しておく
2. GASでHerokuのAPI経由でコマンドをpostする関数を書く
3. GASでスケジューラーを作成する(トリガーを作る)

例として、Railsの場合を示していますが、GAS経由で「herokuのコマンドを定期実行する」という点がポイントなので、他の用途にも使えます。言語がRubyである必要性もありません。

この記事では、Railsの画像投稿アプリを例にとります。
スケジューラーを使って、24時間ごとにデータベースのテーブルのレコードを全て削除し、初期データの画像を投稿する方法を示します。

## 対象読者:プログラミング初心者向け
– 私自身は転職活動中の未経験エンジニアです。内容には正確性を期しますが、間違いがあればご指摘くださると幸いです。
– 初学者がHerokuを使っていて、「Herkouでデータベースを定期的にリセット

元記事を表示

【Rails】ActiveRecordで関連テーブルのカラムでwhereまたは、orderする【ActiveRecord】

# はじめに
表題の通り、ActiveRecordで関連テーブルのカラムでwhereまたは、orderする方法について書いていきます。

# 前提
UserモデルとPostモデルが1:Nで関連づけられており、さらにPostモデルとCommentモデルが1:Nで関連づけられている場合を前提とします。
基本的な書き方は変わらないので、適宜ご自身の状況に置き換えて使用してください。

# コード
“`
# eager_loadでPostsにCommentsをjoinする
posts = User.posts.eager_load(:comments)

# whereで絞り込み
posts.where(‘comments.body = ?’, ‘テスト’)

# orderで並び替え
posts.order(‘comments.created_at desc’)
“`

# 説明
まずはwhereやorderで使用したい関連テーブルをjoinします。
その後、
`where(‘関連テーブル名.カラム名’ 条件)`
`order(‘関連テーブル名.カラム名’ desc or asc)`

元記事を表示

RailsのDB操作を行うコマンドまとめ

### はじめに
DB操作を行うコマンドというのは`rails db:migrate`などのことです。
コマンドは数が多く、名前から想像しにくい(自分だけ?)ものもあったりするため、備忘録としてまとめておこうかと思います。

最初はスカスカですが、少しずつ充実させていく予定です。
※見栄えも少しずつ整えていきます。。。

■参考サイト(公式GitHub)
https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/railties/databases.rake

### 環境
– Rails 5.2.0

### コマンド
|コマンド|説明|備考|
|:—————–|——————:|:——————:|
|rails db:create|データベースを作成||
|rails db:drop|データベースを削除||
|rails db:migrate|マイグレートを実行||
|rails db:migrate:reset|データベース

元記事を表示

既存のRailsアプリにVue.jsを導入する

#環境
ruby 2.6.0
Rails 5.2.4.
Vue 2.6.11

#gem ‘webpacker’ のインストール
“`ruby:Gemfile
gem ‘webpacker’, github: ‘rails/webpacker’
“`
“`
bundle
“`

#yarn のインストール
“`
$ brew install yarn

$ yarn -v
“`

#webpacker のインストール
“`
$ bin/rails webpacker:install
$ bin/webpack
“`
の順に入力。
webpack 関連のファイルが作成・更新される。

#Vue.js のインストール
“`
$ rails webpacker:install:vue
“`
このコマンドを実行することで、`app/javascript/packs` 配下にファイルが作成される。
###これでvueの導入は完了。

#動作確認

###viewの操作をしてみる
“`ruby:app/javascript/packs/hello_vue.js
import

元記事を表示

OTHERカテゴリの最新記事