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

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

VSCodeでブラウザプレビューを表示する方法

##環境
macOS Catalina
version: 10.15.7 (19H2)

##はじめに
私は現在Ruby on Railsのチュートリアル第6版をやってます!
本チュートリアル用にRuby on Railsの環境をローカルで構築し、VSCodeを利用しています。
VSCodeでもCloud9(AWS)のように「ブラウザプレビュー」があれば、と思い設定しました!

##ブラウザプレビューを入れる方法
以下ページから「Install」
https://marketplace.visualstudio.com/items?itemName=auchenberg.vscode-browser-preview

参考:https://coliss.com/articles/build-websites/operation/work/browser-preview-for-vscode.html

##VSCodeでブラウザプレビューを表示する
ブラウザプレビューボタンから、プレビュー表示。
![BrowserPreview.png](https://qiita-image-sto

元記事を表示

2020/10/3 朝アウトプット

#応用の復習
– ルーティング→コントローラー→モデル→ビュー
– データベース作成→database.yml編集→rails db:create→ローカルサーバー再起動
– ローカルサーバーの再起動の理由
– 「Rubyバージョンの変更」、「テーブル・カラム情報の変更」、「Gemの導入状況の変更」など開発環境で編集した場合、これらの情報はローカルサーバーを起動するタイミングに1度だけ読み込まれるため
– RDBとはリレーショナル、データベースのこと。表形式でデータを管理するデータベース
– RDBMSとはRDBを管理するシステム。rails newコマンドでオプションにつけた-d mysqlを指す
– MY SQLとはRDBMSの一つ。特徴は拡張性が高い、小規模から大規模のデータの取り扱いok、柔軟性が高い  できるやつ

元記事を表示

ローカルに立てた複数のdocker-compose上のRailsでAPIを叩きたい

### 完成イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260354/41e04c46-6ec8-b77e-b588-77a49afe7462.png)

### 前提
docker-composeで別々のRails Appを立ち上げておいてください。
こちらではdocker-composeでの設定のみ書きます。
※ ネットワーク等の設定値は参照先にある記事を参考にしています
※ DB = MySQL

### したいこと
ローカルで別々のdocker-composeで立ち上げたRails App間でAPI通信がしたい。
e.g. イメージ図のRails App2のAPIをRails App1から叩きたい

### 何もしない状態で通信してみた時のエラー
キーワードからこのメモにたどり着けるように残しておきます。

“`
Errno::ECONNREFUSED: Connection refused – connect(2)
“`

### 概要
1. 共通ネットワーク

元記事を表示

[じぶん用メモ] RailsでPry・DBと仲良くなろう

###はじめに
RailsでPryを使ってDBの操作をする時に
必要なコマンドや考え方を自分用メモとして残します。

###環境
MacOS Mojave
Ruby 2.6.4
Rails 6.0.3.3
Vue 2.6.12
Webpack 4.44.2
yarn 1.22.5
Docker 2.3.0.5
VScode

####環境構築
Dockerを用いたVue Rails6環境構築については以下にまとめています。
[リンク:Rails6 Vueの連動方法(環境構築から)](https://qiita.com/x5dwimpejx/items/3389952db62f27c4aa0d)

###モデルとDBのマイグレーション関連

####Dockerコンテナは上げておきます。

“`rb:
Docker-compose up
“`

####Articleモデルの作成

“`rb:
Docker-compose exec web rails g model Article name:string content:text

Running via Spring pr

元記事を表示

2020/10/2 テックキャンプ12日目 アウトプット

#Railsで教本通り投稿アプリつくってみる
### ライブラリ導入
– ライブラリとは、複雑なプログラムを1つにまとめたもののこと
– RubyGemsとは、Rubyのライブラリの総称のこと ガムじゃない
– Gemとは、RubyGemsの中のライブラリ一つ一つのこと  マウスウォッシュではない
– Gemfileとは、アプリケーションで使用するGemのGem名とバージョンを記載し、管理するファイルのこと
– Gemfile.lockとは、bundle install済みのGemを記録するファイルのこと  バンドル バンドラー

#####ページの新設の手順は、ルーティング→コントローラー→モデル→ビューが基本的な流れ

###投稿内容の表示
– CRUDとは、アプリケーションのデータ取り扱いに関して、基本的な処理の頭文字を並べたもののこと
– 7つのアクションとは、index, show, new, create, edit, update, destroyの、Railsにおける基本的なアクションの総称のこと
– resourcesメソッドとは、7つのアクションへのルーティングを自

元記事を表示

herokuでMySQL5.7以降を使うためにClearDBからJawsDBに変更する

## DBを変更した動機
Rails製のアプリをherokuにデプロイしmigrationした際、以下のようなエラーに遭遇しました

“`
Mysql2::Error: Specified key was too long; max key length is 767 bytes
“`

これはDBのcharsetがutf8mb4であったことが原因です
utf8mb4は1文字が4バイトなので

varchar(255)を扱う場合、255 * 4バイト = 1020バイトとなり767バイトを超えてしまいます

そのためインデックスキーを貼れずにエラーになってしまいます。

調べているといろいろな手段がありました

## 色々な解決方法

### 1. utf8mb4からutf8に変更する
MAXが765バイトになるので納まるのですが、MySQL5.5のutf8では絵文字を扱うことができません
絵文字を扱いたかったのでこれではダメです

### 2. varcharの最大長を765バイト以下になるようにする
x * 4 > 765 でMAXで191文字まで大丈夫だということがわかりま

元記事を表示

railsで子モデルをcreated_at descで取得するscope

子モデルのデータをdescやascで取得方法を変えるには下記の方法でいけます

“`
scope :order_asc, -> { includes(:messages).order(‘messages.created_at ASC’) }
“`

### 参考記事
[Ruby On Rails: Order by child attribute](https://stackoverflow.com/questions/12164088/ruby-on-rails-order-by-child-attribute)

元記事を表示

【Docker】docker-compose buildしたらCan not read file というエラーが出て困った。。【Rails6.0】

最近チーム開発で新しいプロジェクトが始動し、Dockerで環境構築のタスクをやらせて頂きました。その時に、Dockerをビルドしようとしたら “OSError: Can not read file in context ~“ という見たこともないエラーが起きて途方にくれたので同じ道をたどる方が少しでもいなくなるように、ここで共有させて頂きます。

【環境】

– Rails 6.0.3
– Ruby 2.7.1
– PostgreSQL 13.0
– Node.js 10.21.0
– Yarn 1.22.5
– Bundler 2.1.4
– Redis 6.0.8
– Docker for window
– windows10 Pro

##解決方法
いきなりですが、解決方法です。めっちゃ簡単です。
どうやらエラー文を読んでいたらnode_modulesディレクトリが悪さをしていたらしかったので、**.dockerignoreファイルを作成**し、そこに
node_modulesと書いてビルドしなおしたらうまくいきました!

“`shell:.dockerignore
nod

元記事を表示

Ruby on Rails(MAC)のローカルで環境構築で詰まった部分の解決方法!

##環境
macOS Catalina
version: 10.15.7 (19H2)

##はじめに
私は現在Ruby on Railsのチュートリアル第6版をやってます!
本チュートリアルではCloud9での実行を推奨しています。
ただ私はCloud9を使用していて、本チュートリアルの第3章あたりで、EC2の容量が一杯になりました。
色々解決策を投じたのですが、解決できなかったので、仕方なくローカルで環境構築したという経緯があります。

そのローカルでRuby on Railsの環境構築した際に色々詰まったところがあったので、詰まった部分の解決方法をまとめました!
自分が「詰まったときにどうして解決したのか」を記録するのと同時に、同じところで詰まった方がいれば、参考になればと思い、投稿しました!

##gem install railsでエラー発生

“`
$ gem install rails
“`
を実行すると以下のエラーが発生。

“`
Building native extensions. This could take a while… 
ERROR:  Err

元記事を表示

Rails + ElasticSearch 調査メモ

# ElasticSearch

java8以上が必要 ([ダウンロード](https://qiita.com/Hitoshi5858/items/02a8e231cb346e5efbf9))

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

# ESの起動
$ /usr/local/Cellar/elasticsearch/7.8.1/bin/elasticsearch
or
$ elasticsearch

# 動作確認
$ curl http://localhost:9200

“`

### プラグインの追加

– kuromoji (分かち書き)
– ICU (文字の正規化フィルター)

“`
$ elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.8.1.zip
$ elasticsearch-plugin install h

元記事を表示

Rails権限・ロールまわり調査

## 概要
Railsでのロール管理・アクセス権限管理のやり口について調べたときのメモ

### アクセス権限チェック(認可)
・cancancan
・pundit
・banken

### 認可について
設定ファイルがシンプルそうでrubyで書けるpunditかbankenがやりやすそう。
普及具合で言えばpundit。ただbankenのスライドを見ると、「作成者がcancancanとpunditの不満点をクリアしたもの」、ということもありbankenが良さそうに見える。

### role設定(権限管理)
・rolify

それぞれのgemの概要は後述。

それぞれのgemの

※以下スライドはcancancan、pundit、bankenの違いがわかりやすい。

※以下はcancancanとpuditの比較参考
https://www.icare.jpn.com/dev_cat/pundit%E3%81%A8cancancan%E3%81%AE%E6%AF%94%E8%BC%

元記事を表示

本番環境でMySQLのデフォルト設定ONLY_FULL_GROUP_BYを守っておらず一意になっていないと怒られたエラーの解決法

# 問題
転職活動用のポートフォリオをAWSでのデプロイが完了したところ。
本番環境でchart.jsで作ったグラフを表示しようとしたところ、以下のエラーが表示された。

# エラー
“`
Mysql2::Error:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘pfc-master_production.posts.created_at’ which ins not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by: SELECT `posts`.`created_at` FROM `posts` WHERE `posts`.`user_id = 2 GROUP BY date(created)
“`
# 関連するソースコード

### charts_controller.rb

元記事を表示

個人アプリを作る時に、hamlとerbのどちらで作るか迷った

## はじめに
 ruby,railsでプログラミングを学習をはじめた頃、自分の周りでこんな意見をよく聞きました。
「個人でアプリを開発していく段階になった時に、hamlとerbのどちらで作った方がいいのだろうかと迷う。」
「hamlでの書き方を検索するけど、全然見つからない。」
「hamlって自走した時に本当に使うのか。」

 両方の記法でアプリを作って、hamlとerbのどちらを使うかの判断材料についてふりかえってみました。どちらがいいかを解説しているわけではないです。

## 判断材料
下の「記法の違い」を参照しながら見てもらえればと思います。

– コード量
 hamlの方が圧倒的に記述量が少なく済みます。少ないと言うことは記述時間も短縮できます。慣れると、速く、見やすいコードを書くことができます。

– 構造理解
 hamlは要素の構成の書き方がはっきり決まっています。と言うのも、hamlは親子要素をインデントで判断しています。半角スペース1つずれているだけでエラーが発生します。
 一方で、書き方に従ってセレクタ名を記述すれば、SCSSでセレクタをネストさせて、お互いの構造を

元記事を表示

とってもRailsライクなサーバーレスフレームワーク「Ruby on Jets」を本番環境に導入した話

**※ この記事は2019年7月12日に作成した [とってもRailsライクなサーバーレスフレームワーク「Ruby on Jets」を本番環境に導入した話 – LiBz Tech Blog](https://tech.libinc.co.jp/entry/2019/07/12/113215) と同じ内容です**

# はじめに
こんにちは!先日26歳を迎え、30歳への恐怖感が着々と増してきた渡邊です。

今回が3回目のブログ投稿になります。
前回の[Kubernetes(GKE)にお安く入門する](https://tech.libinc.co.jp/entry/2019/03/22/105911)ではたくさんのブックマークをいただきありがとうございました。

今回は実際に業務での利用をしはじめた**Railsライク**なRuby製 サーバーレスフレームワーク **「[Ruby on Jets](https://rubyonjets.com)」**について書きます。

20190710145705.jpgAWS CopilotでECS FargateにRailsをデプロイ

# Copilotとは?
Copilotは[Amazon ECS CLI](https://github.com/aws/amazon-ecs-cli)の後継に当たるもので、
ECSでのコンテナ実行をより簡単に行う為に開発された環境構築ツールです
Copilotで構築するAWSリソースはCloudFormationによって管理され、
AWS CDK(プログラムでCloudFormationテンプレートを管理するツール)と違ってコードを書く必要は殆どありません!

[GitHub – aws/copilot-cli](https://github.com/aws/copilot-cli)
[Wiki](https://github.com/aws/copilot-cli/wiki/Getting-Started)

# Copilotのインストールと事前準備
homebrewでインストールまたはcurlで直接インストールができます

“`
# homebrew
$ brew install aws/tap/copilot-cli

# curlで直接インストール
$ curl -Lo

元記事を表示

バイナリサーチを使った、配列における任意の検索方法

【概要】
—————————————-
1.結論

2.バイナリサーチとは何か

3.どのようにコーディングするか

4.ここから学んだこと(エラーの時に使用)

1.結論
—————————————-
lengthメソッドとwhile文、if文を組み合わせて使う!

2.バイナリサーチとは何か
—————————————-
配列に入ったデータ等(同じ値は入っていないものとします)に対して行う検索方法です。内容としては、中央の値を確認し、そこから左右との大小関係を比較し順々に探していく検索方法です!

3.どのようにコーディングするか
—————————————-

“`ruby
def binary_search(array, number_factors, value)
min_f

元記事を表示

【Rails】初心者が image_tagで画像のサイズ変更(模索中)

###1. form_tagで画像を表示する

“`erb

  • <%= image_tag @post.image.url,size:"180x200" %>
  • または

  • <%= image_tag @post.image.to_s,size:"180x200" %>
  • “`

    表示することができるようになったコードは↑です。
    gemはcarrierwaveとmini_magickをインストールしました。

    ###2. 失敗例
    “`erb

  • <%= image_tag @post.image.url %>
  • “`
    sizeを定義しないと、画像サイズが巨大でブラウザがめちゃくちゃに。
    erbファイルにsize指定を外して、uploaderでリサイズしようとしても変化がない。↓

    “`rb
    version :thumb do
    process resize_to_fill: [50, 100]
    end
    “`

    ###4. 今後の課題
    erbファイルに直接size指定をしたことで、ブラウザ表示自体のフォーマットが崩れるエラ

    元記事を表示

    rails c が立ち上がらず大量の行のエラーが出る

    #問題
    中間テーブルを作成した後くらいにrails cでコンソールを立ち上げようとしたが、以下のようなエラーが出た

    “`
    : Unknown key: :throught. Valid keys are: :class_name, :anonymous_class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type, :index_errors (ArgumentError)
    “`

    rails sも立ち上がらず。

    #結論
    中間テーブルのアソシエーションが間違っていた。以下のように修正した後、db:migrate:resetで解決。

    roomsテーブルとusersテ

    元記事を表示

    Ruby on Rails ログイン機能の実装(devise編)

    ###概要
    gem’devise’を使ってログイン機能を実装する
    パスワードとメアドでのログインではなく、名前とパスワードのログインに変える。

    ###今回の目標と自身の環境
    – deviseを使用し、ログイン機能を実装
    – 名前とパスワードでのログインに変更
    – Ruby 2.7.0
    – Rails 6.0.3.3

    ###実装
    ####準備
    “`:Gemfile
    #一番下に追加
    gem ‘devise’
    “`
    Gemfileの編集後にターミナル以下のコマンドを実行

    “`:ターミナル
    bundle install
    rails g devise:install
    rails g devise User
    rails db:migrate
    “`
    ただし、今回は名前でログインすると決めているので、rails db:migrateする前にマイグレーションファイルを編集する。

    “`:db/migrate
    #t.timestamps null: falseの上に追加
    t.string :name
    “`
    ####viewの作成
    “`:ターミナル
    rails g d

    元記事を表示

    Ruby on Rails ログイン機能の実装(Session編)

    ###概要
    sessionを使用しログイン機能を実装する。
    session(session[:user_id] = 1)の使い方を理解する 

    ###sessionとは
    ステートフルな通信を実現するための仕組みのこと。

    通常のブラウザ(ステートレス)の通信では、ページが変わるたびに前のページの情報は全て破棄されてしまう。
    つまり、前のページでログインしても、次のページに遷移したときログインしていると言う情報が引き継がれないため、遷移するたびにログインが要求されることになる。(非常に不便)

    そのため、前のページの情報を引き継ぐことが可能なステートフル通信を実現する必要がある。
    具体的には、データをクッキー(cookie)に保存することでステートフルな通信を実現できる。

    ###今回の目標と自身の環境
    gem “devise” を使用せずにログイン機能を作る

    Ruby 2.6.3
    Rails 6.0.3.3
    gem “bcrypt” を使用(パスワードの暗号化のため)

    ###実装
    ####sign in(新規登録)機能の作成

    “`:ターミナル
    #

    元記事を表示

    OTHERカテゴリの最新記事