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

Rails関連のことを調べてみた2019年11月02日
目次

Ruby on Rails インストール、アプリケーション作成、サーバーを立てるまで

Webアプリケーション開発のフレームワークである、
Ruby on Railsの導入してみたいと思います。

# 前提
●Rubyが導入されていること
●Rubyのバージョンが2.2.2以上であること(Rails5系を使うため)

#Ruby on Railsインストール
1:コンソールを開く

2:Railsインストールコマンドを記入

“`
gem install rails -v “5.2.3”
“`

3:確認する

“`
rails -v
“`

#アプリケーション作成
アプリケーション作成は、コンソールを開き、

“`
rails new アプリケーション名
“`

入力すると、アプリケーションが作成されます。

アプリ名「test_app」を作成したいと思います。

“`
rails new test_app
“`

入力した後、ディレクトリを移動し、lsコマンドを入力、
作成されたフォルダ群が見れると、作成が成功したこととなります。

“`
cd test_app
ls
Gemfile app db public vendor
Gemfile

元記事を表示

オブジェクトの更新 save, update_attributes

## オブジェクトの更新
### save

“` save.rb
user = User.new(name: “new”, email: “hoge@example.com”)
user.save
“`
新規作成したオブジェクトを保存
検証に失敗すると”false”を返す

### update_attributes

“` update_attributes.rb
user.update_attributes(name: “qita”, email: “foo@bar.com”)
“`

既にあるオブジェクトを更新
検証に失敗すると”false”を返す

### update_attribute

“` update_attribute.rb
user.update_attribute(name: “qiita”)
“`

特定の要素のみ更新し,検証を回避する

## 参考
[第6章 ユーザーのモデルを作成する – Railsチュートリアル](https://railstutorial.jp/chapters/modeling_users?version=4.2#sec

元記事を表示

Rails on DockerのQuickstartをalpine linuxでやってみる

# Abstract
Rails on DockerはDocker docsにサンプルアプリが載っています。
–> [Quickstart: Compose and Rails | Docker Documentation](https://docs.docker.com/compose/rails/)

ただ、Dockerイメージはサイズを軽量化するのがよしとされており、そのためにalpine linuxを使うというのはよくある話のようです。ので、上記のQuickstartをalpineで実施するメモです。

# Define the project
まず、Dockerfileを作ります。Quickstartでは以下の内容。

“`dockerfile:Dockerfile(Quickstart版)
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfil

元記事を表示

RubyでWebフレームワークを自作する

# RubyでWebフレームワークを自作する
## 動機
Webフレームワークを使ってアプリケーションを作成することは良くあるが、実際にその中身やどういった動きをするのか知りたい。
今回は、RailsライクなMVCフレームワークを自作します。

## Rackで作成していく
ディレクトリを作成して、 `bundle init` でGemfileを作成します。

“`zsh
❯ mkdir my_framework
❯ bundle init
“`

`rack`をインストールします。
また、デバッグしやすくするために `pry` もインストールします。

“`ruby:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|/repo_name/| “https://github.com/#{/repo_name/}” }

gem ‘rack’
gem ‘pry’
“`

“`zsh
❯ bundle install
“`

## Rackとは

元記事を表示

RailsアプリでELB(AWS)をエンドポイントに常時SSL化したらアプリにアクセスできなくなった

一度デプロイに成功したアプリケーションが常時SSL化をしたところ、pcからならアクセスできるけどスマホからだとアクセスできない、なんてことになりました。

ものすっごい初歩的なところで1日かけてしまったので、自分への戒めも含めて投稿しようかと思います。

## 前提

・EC2インスタンスランニング状態(ポート:HTTP 80を開き、ソースはロードバランサのセキュリティグループを指定)
・ロードバランサのターゲットグループのステータスはHealty(ポート:HTTP 80を設定)
・ロードバランサのDNS名にはAレコードが設定されている
・ロードバランサのリスナー:HTTPS 443 (SSL認証書も紐づいている)
・コンソールからec2-userにログイン可能
・本番環境内のproduction.logにはFatalやErrorの記述なし
・Capistranoの自動デプロイにエラーなし

##### しかしアプリにアクセスできたりできなかったりする!!

## 結論

##### ELBのセキュリティグループインバウンドでソースにマイIPを指定していた

つまり、自宅のWifiな

元記事を表示

Rails6のActionDispatch::HostAuthorizationとELBのヘルスチェックの共存

Rails6の[ActionDispatch::HostAuthorization](https://github.com/rails/rails/pull/33145)設定と[okcomputer](https://github.com/sportngin/okcomputer)を利用した `Nginx – Rails – RDS` という経路のヘルスチェックの共存に少しコツが必要だったので記事にしました。

## ActionDispatch::HostAuthorization
https://github.com/rails/rails/pull/33145
Rails6から追加された、[DNSリバインディング攻撃](https://en.wikipedia.org/wiki/DNS_rebinding)から保護する新機能です。

下記のように設定することで、指定したホスト以外からのアクセスはエラーとなります。

“`ruby
Rails.application.config.hosts << "product.com" ``` ## okcomputer https://

元記事を表示

[メモ]Railsで特定のページで条件分岐する方法

例えば、page1というページの場合に特定の処理を行いたい場合

“`
<% if request.path.include?('page1') %>
[処理を書く]
<% end %>
“`

元記事を表示

video_tagで横幅いっぱいに動画を挿入する方法

#はじめに
video_tagで横幅いっぱいに自動再生で動画を流す。
備忘録として残します。

#つまずいたところ
– 動画のファイルの置所
– 自動再生
– 横幅を画面いっぱい、縦幅は指定

#実装手順
app/assetsの直下にvideosフォルダを作成。
videosフォルダ内に背面で流したい動画を入れる。
(ここでは、test_video.mp4という動画ファイルを入れました。)

次にvideo_tagを使って動画を表示

“`index.html.haml
.video-content
= video_tag “test_video.mp4”, loop: true, autoplay: true, muted: true
“`

object-fit: cover;をつけることで、動画の横と縦の比率を変更できた。
動画も崩れないで再生されている。

“`index.scss
.image-content{
height: 80vh;
z-index: 1;
video{
width: 100%;
height: 100%;

元記事を表示

MySQL かんたんにテーブルのid番号を1からリセットする方法

# MySQLのid番号 リセット方法

MySQLには初期設定でauto-increment機能が設定されています。
簡単にいうと「自動連番機能」です。

ただ番号間にあるレコードを消すとそのid番号のみが欠番となったまま、無視され、最後の番号から連番されてしまうため、テーブル管理において不都合なことが生じる場合があります。

そこで本記事では
###「id番号を1から振りなおす方法」をご紹介いたします。

方法のみ知りたい方は以下のリンクをクリック
### [方法へジャンプ](#方法)

## 状況:
たとえばこんな感じのテーブルがあり、id番号が順番に振られています。

| id | name |
|:—:|:———-:|
| 1 | ANA |
| 2 | DELTA |
| 3 | JAL |
| 4 | UNITED |
| 5 | VANILA |
| 6 | PEACH |

しかし、いくつかレコード削除などによって欠番が生じると下のような順番にな

元記事を表示

【i18n-js】Railsアプリのi18n(tメソッド)をVue.jsでも使用する

Railsアプリ開発の際、フロントをVue.jsで書いているのですが、
「i18nをフル活用し、ソースコードに日本語のベタ書きは限りなくゼロにしていこう!」
とした場合、
「Vue.jsではどうすればいいの?」
となったので実装の記録を書き残します。

#前提
– macOS Mojave 10.14.6
– Ruby 2.5.5
– Rails 5.2.3
– Vue 2.6.10

#gem「i18n-js」を導入
“`:Gemfile
gem ‘i18n-js’
“`

“`:terminal
$ bundle install
“`

JavaScriptでI18nを利用する場合、`config/ja.yml`を直接使える訳ではなく、`.js`に変換してそれを読み込んで利用します。
i18n-jsはその変換出力のためのgemです。

#i18n-js.ymlを作成
どのように変換出力するかのルールを設定するファイルです。

公式などを見ると一般的に使われる設定ではtranslation.jsという1つのファイルに全ての言語の設定を詰め込むため、読み込みが重くなってしまいま

元記事を表示

rails generateでのpolymorphic associationの生成

### 要約
要はreferencesを使って`polymorphic association`を作りたい

### model構成
UserがいいねするためのLikeモデルで、いいねする対象がpolymorphicになっている

### 書き方
“`ruby

bundle exec rails g model Like user:references likable:references{polymorphic}:index

### 参考
https://railsguides.net/advanced-rails-model-generators/

元記事を表示

Rails6 のちょい足しな新機能を試す103(ActionDispatch::Response#content_type編)

# はじめに

Rails 6 に追加された新機能を試す第103段。 今回は、 `ActionDispatch::Response#content_type` 編です。
Rails 6 では、 `content_type` は、 Content-Type Header の情報をそのまま返すようになります。

Ruby 2.6.5, Rails 6.0.0, Rails 5.2.3 で確認しました。
また、RSpec のバージョンは、 3.9.0 です。

“`shell
$ rails –version
Rails 6.0.0
“`

今回は、User CRUD を作り、request spec を変更することにより確認します。

RSpec の導入などについては、 [Rails6 のちょい足しな新機能を試す24(unfreeze_time 編)](https://qiita.com/suketa/items/9830f814ee824ca4e681) などを参考にしてください。

# Rails プロジェクトを作る

“`
$ rails new rails_sandbox

元記事を表示

RailsでCSSやJavaScriptが読み込まれる仕組みをアセットパイプライン、Sprockets、マニフェストファイルで理解する

本来、HTML,CSSでサイトを作成する際は、HTMLファイルからlinkタグを使ってCSSファイルを読み込む設定が必要です。

しかし、Railsの場合、それらを記述する必要はありません。

じゃぁどうやって必要なCSSやJavaScriptが読み込まれるのか??
**アセットパイプライン**
**Sprockets**
**マニフェストファイル**
のこれらの単語を使ってざっくり理解する。

#アセットパイプライン
要は、まとめてくれる(統合してくれる)って仕組み。
詳しく働きをみると以下のようになる。
1.コンパイル
2.統合
3.圧縮
4.ダイジェスト付与
5.完成したファイルが`public/assets/`に保存される

#Sprockets
アセットパイプラインの動作を担っているのがSprockets。
gemとしてデフォルトで入っている。
アセットパイプラインはデフォルトで有効なので、無効にしたい場合は`–skip-sprockets`をつけて以下のコマンドを実行。

“`
$ rails new appname –skip-sprockets
“`

#マニフ

元記事を表示

PythonistがRuby on Railsに異世界転生したときの記録

## 初めに
これまではPHPかPythonでの開発がほとんどだったのですが、様々な事情により、Ruby on Railsの案件に取り組むことになりました。これまでよくやっていたPython + Flask構成と比較しながらRuby on Railsを勉強しているのですが、そのmemoを残しておきたいと思います。内容は随時更新します。

### 環境

* ubuntu 19.04 eoan ermine
* rbenv version 1.1.1
* ruby verison 2.6.5

## 目次

* Rubyの環境構築
* Railsの導入

## Rubyの環境

Pythonでは、以下の環境を使っていました。

“`
* pyenv(Pythonのバージョン管理)
* pip(デフォルトのPackage管理)
* pipenv(仮想環境構築+Packageの管理)
“`

Rubyでそれぞれに対応するのは、(というかPythonのそこら辺のツールはRubyのツール群に触発されて開発されたものが多いので、こちらのほうが大元というべきなのですが、)

“`
* rbe

元記事を表示

Railsの便利機能「Application Template」で rails newと初期設定を自動化できた!

Railsアプリの新規作成から初期設定までを`rails new`と`rails db:create`だけで完了させます。
rails newのあとにひたすらつづくgemのインストールや初期設定、めんどくさくないですか?
ちょっとしたtypoでRailsAbort! こういった人的ミスによるグツグツから開放されたくないですか?
テンプレートファイルは1つにまとめておけるので、Railsアプリ新規作成時の手順書としてもメンテできて一石二鳥ですよ!

## 環境
– MacOS 10.14.6
– Ruby 2.6.3
– Rails 5.2.3
– MySQL 8.0.16
– Docker 19.03.4
– docker-compose 1.24.1

※Dockerじゃなくてもイケます。

## 方法

RailsのApplication Templateという機能を使用します。

## やること

– ApplicationTemplateファイルをつくります。
– `rails new -m app_template.rb` コマンドをうちます。
– `rails db:cre

元記事を表示

rescueでエラーを拾ってくれない問題

#BackGround
[Postman](https://www.getpostman.com/)を使ってRailsのアクションを設計どうりに処理してくれるかテストしていました。
問題になったのはこの“`user_controller“`のshowアクション

“` user_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) render json: { status: 'success', data: @user } rescue ActiveRecord::RecordNotFound render json: { status: 'error!', data: @user.errors } end private def user_params params.require(:user).permit(:user_name,:email,:password,:pa

元記事を表示

【Ruby on Rails】gem「devise」のREADMEを読んでみた

#はじめに

オープンソースのソフトウェアやプログミング言語、ライブラリには、間違いなく公式のドキュメントが存在します。
学習のために無料のラーニングシステムを使うこと、書籍を購入することもいいですが、

**個人的には、公式ドキュメントには必ず一度は目を通すべきもの**だと思ってます。

なぜなら出版されてしまった本とは異なり、常に最新の状態にアップグレードされ、多くの人が目にするので間違いが日々修正されているからです。

**英語が読めない? 長くて読む気がでない? ならばググりましょう!** 
例えば英語がわからないなら、この世の中便利な時代なので、英語のドキュメントについてすでに読んだ人の記事などが検索してヒットするはずです)

#やったこと

Ruby on Railsの開発環境下で、**認証機能を実装したい際に利用することが多いgem「devise」**のREADMEを読んでみました。
※2019年10月時点の情報です。

https://github.com/plataformatec/devise

# deviseが持っているモジュール(簡単に言えば機能)

1.

元記事を表示

mysqlが起動できない!のエラーが出るときの対処法

## 事象
mysqlを起動しようとして以下のコマンドを打ったときに
`$mysql.server start`

mysqlが起動できずに以下のエラーが置きます
`ERROR! The server quit without updating PID file`

エラー通りに
`/usr/local/var/mysql/`
にpidファイルを作っても起動ができません。

## 対処法
以下のファイルを消してから
`/tmp/mysql.sock`

mysqlの起動を行いましょう
`$mysql.server start`

## 対処法までのたどり着き方
エンジニアはエラーの対処までのたどり着き方なのでみていきます。

まずmysqlのlogファイルをみてみましょう。
以下のファイルをみてみましょう。
`$tail -f /usr/local/var/mysql/***.err`

このコマンドを打ちながら別のターミナルタブを開いて
`$mysql.server start`
を打ってみましょう。

そうすると
`[ERROR]`
となっているところがあります。

そこに `my

元記事を表示

1対多のモデル間のテーブルに一つのformで一括登録する

## やりたいこと
1対多の関係を持つモデルに対し、同時にレコードを登録する。
検索した際によく出てきたaccepts_nested_attributes_forは使わず、一括登録をするためのモデルを別で用意して実装。

## 前提条件
下記のように、一人のcustomerが多くのreservationsを持つ、1対多の関係。

“`models/customer.rb
has_many :reservations
“`
“`models/reservation.rb
belongs_to :customer
“`

## 考え方
1. customerとreservationを一緒に扱うためのモデル(customer_form)を作成。
2. 作成したモデル内で、架空のテーブルを作成し、2つ同時に登録するためのsaveメソッドを定義する。※実際はテーブルは存在しません。イメージです。
3. customerコントローラでnewアクション、createアクションを定義。その際、②で作成したモデルのsaveメソッドを使う。
4. viewを作成する。
5. レコードを登録した後に

元記事を表示

resourcesメソッド

## 意味
CRUD (Create, Read, Update, Delete) 操作に対応付けられるルール
index, show, new, edit, create, update, destroy の
7つのアクションへのルーティングを一挙に宣言する

## 使用法
“` routes.rb
resources :photos
“`

| HTTP動詞 | パス | コントローラ#アクション | 目的 |
|:–|:–|:–|:–|
| GET | /photos | photos#index | すべての写真の一覧を表示 |
| GET | /photos/new | photos#new | 写真を1つ作成するためのHTMLフォームを返す |
| POST | /photos | photos#create | 写真を1つ作成する |
| GET | /photos/:id | photos#show | 特定の写真を表示する |
| GET | /photos/:id/edit | photos#edit | 写真編集用のHTMLフォームを1つ返す |
|

元記事を表示

OTHERカテゴリの最新記事