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

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

【Rails】request specでsigned/encrypted cookiesにアクセスする

# 環境

– Rails 5.2.3
– RSpec 3.9.0

# 問題/やりたいこと

そのままでは request spec 内で signed cookie 及び encrypted cookie にアクセス出来ません。
具合的には、以下のようなエラーが出ます。

“`ruby
NoMethodError:
undefined method `signed’ for #
“`

これは、request spec 内で使われている cookies オブジェクトが `ActionDispatch::Cookies::CookieJar` ではなく `Rack::Test::CookieJar` のインスタンスであり、`signed` や `encrypted` メソッドを実装していないためです。

# 解決方法

“`ruby
it do
get some_url
expect(response).to have_http_status(:success

元記事を表示

RailsでJavascriptを使う

Rails5.1以降では、webpackがJSの管理パッケージとして導入されており、以前で使われていたsprocketsはデフォルトでは装備されなくなっています。
ApplicationHtmlをみてみると、application_pack_includeなんちゃらみたいなコードがありますが、これがファイルにあるjsのコードを全て読み込んでapplication.jsに送っています。
sprocketsの場合だと、application_something_includeなんちゃらだったと思います。

元記事を表示

link_toメソッドの使い方

link_toメソッドはerbに埋め込みます。
アセットパイプラインにより、erbファイルをhtmlに変換する事でlink_toからaタグに変わります。
このように、Rubyのコードを自動で変換する機能がついているのがRuby on Railsです。
えへへ

元記事を表示

【Rails】APIモードでcookieを使う

# 環境

– Rails 5.2.3

# 前提

– Rails を [APIモード](https://railsguides.jp/api_app.html)で使っている(←のドキュメントの[英語版](https://guides.rubyonrails.org/api_app.html))。

または

– `ActionController::API`を継承して API用のcontrollerを使っている。

# 問題/やりたいこと

そのままでは [cookies](https://api.rubyonrails.org/v5.2.3/classes/ActionDispatch/Cookies.html)にアクセスできないので、アクセスできるようにしていきます。

# やり方

ここでは後者(`ActionController::API`を継承して API用のcontrollerを使っている)前提とします。

## ActionController::Cookies を include する

`ActionController::API`を継承しているベースコントローラ

元記事を表示

bundle install時に、libv8やtherubyracerでエラーが出た

## 概要
既存のプロジェクトに参画する際、Railsの環境を構築するとき、libv8やtherubyracerにより以下のようなエラーが出たので対処方法を記載する。

“`
# libv8のエラー
An error occurred while installing libv8(3.16.14.19), and Bundler
cannot continue.
Make sure that `gem install libv8 -v ‘3.16.14.19’ –source
‘http://rubygems.org/’` succeeds before bundling

# therubyracerのエラー
An error occurred while installing therubyracer(0.12.3), and Bundler
cannot continue.
Make sure that `gem install therubyracer -v ‘0.12.3’ –source
‘http://rubygems.org/’` succeeds before

元記事を表示

ActiveModel::Serializers::JSONのfrom_jsonの使い方を3分で理解。

Railsの標準機能で、JSONをrubyオブジェクトへとシリアライズする。
Rails製APIでよく使われるのに情報が少ないのでメモ

## from_jsonとは?
from_json(json, include_root = include_root_in_json)
modelのattributesは、JSON文字列からセットする。
selfを返す。

使用例

“`ruby

class Person
include ActiveModel::Serializers::JSON
attr_accessor :name, :age, :awesome

def attributes=(hash)
hash.each do |key, value|
send(“#{key}=”, value)
end
end

def attributes
instance_values
end
end

json = { name: ‘bob’, age: 22, awesome: true }.to_json
person = P

元記事を表示

【Rails6+Bootstrap4】コピペだけ!Bootstrap4をRails6で使うための手順完全版

## 環境

ruby 2.6.4

Rails 6.0.2.2

rbenv 1.1.2

bootstrap 4.3.1

mysql2 0.5.3

## やりたいこと

コピペだけでBootstrap4をRails6で使える手順を共有します

手順通りに進めれば魔法のように導入できちゃいますよ

## 完全手順

### 1. bootstrap 4.3.1を追加
“`
$ yarn add bootstrap@4.3.1 jquery popper.js
“`

### 2. application.jsに下記コード追加

“`app/javascript/packs/application.js

import “bootstrap”
“`

### 3. webpack/environment.jsを修正

“`config/webpack/environment.js

const { environment } = require(‘@rails/webpacker’)
const webpack = require(“webpack”)
environme

元記事を表示

EC2関連で使用するターミナルコマンド(順次追加予定)

“`:ターミナル
chmod 600 ダウンロードした鍵の名前.pem
“`
chmodは権限の変更。
chmod 600で所有者のみに読み込み権限と書き込み権限を付与してそれ以外は全て不許可

“`:ターミナル
mkdir ~/ファイル名
“`
ホームディレクトリに新規ディレクトリを作成するコマンド。

元記事を表示

マイグレーション入門

#マイグレーション入門

##マイグレーションとは

> text
マイグレーションは、データベーススキーマの継続的な変更を、簡単に行なうための便利な手法です。マイグレーションではRubyのDSLを使っているので、生のSQLを作成する必要がなく、スキーマへの変更をデータベースの種類に依存せずに済みます。

なるほど本来であればテーブルを追加したときや、テーブルに対して属性を追加した時などは
SQLを作成する必要がありますよね。

CREATE TABLE HOGE

こんな感じで生のSQLを書いてデータベースへの変更をするがそれをする必要がなくなります。
またデータベースの種類に依存しません。
なんとなく使ってたけどすごいよねー。

##マイグレーションの例

productsというテーブルを追加する例です。

nameというstringカラムと、descriptionというtextカラムが含まれています。主キーはidという名前で暗黙に追加されます。idはActive Recordモデルにおけるデフォルトの主キーです。

“`ruby.rb

class CreateProduct

元記事を表示

【Rails】TwitterのOGPを設定する

Gemなしです。

TwitterのOGPを表示させるために必要なmetaタグについては以下の記事を参考にしました。
[【2020年版】Twitterカードとは?使い方と設定方法まとめ](https://saruwakakun.com/html-css/reference/twitter-card#section3)

## 実装
“`app/helper/application_helper.rb
def full_title(page_title = ”)
base_title = ‘MC BATTLE CHANNEL’
if page_title.empty?
base_title
else
“#{page_title} | #{base_title}”
end
end

def full_url(path)
domain = if Rails.env.development?
‘http://0.0.0.0:3000’
else
‘https://mcbattle

元記事を表示

RailsのViewでの微妙に異なる繰り返しの書き方をいくつか

# 概要

以下みたいなコードを見ると思う。4件だからいいが10件とかあったり、ネストが深いと悲しくなってくる。
どうにか簡単に、繰り返しを少なく書きたい。ついいろいろ試してしまう。

“`erb

  • ユーザ名
    <%= user.name %>
  • メールアドレス
    <%= user.email %>
  • 性別
    <%= user.sex == 1 ? '男性' : '女性' %>
  • 役割
    <%= user.role %>

“`

## 1. 単純な繰り返しの場合

[Draper](https://github.com/drapergem/draper)と[Active Recordモデルの翻訳](https://rail

元記事を表示

【Rails】whenever による定時バッチ処理

#【Rails】whenever による定時バッチ処理

Wheneverを使ってRailsでのバッチ処理を実装したのでまとめます。

## 目次
* [動作環境](#動作環境)
* [やりたいこと](#やりたいこと)
* [手順](#手順)
* [wheneverのインストール](#wheneverのインストール)
* [railsにlibを加える](#railsにlibを加える)
* [バッチ処理の記載](#バッチ処理の記載)
* [schedule.rbの作成・編集](#schedule.rbの作成・編集)
* [実行結果](#実行結果)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`ruby : 2.6.3p62`
`rails : 5.2.4`

## やりたいこと

決まった時間に定期的に実行するタスクを作成したい

## 手順

### wheneverのインストール

“`ruby:Gemfile
gem ‘whenever’, re

元記事を表示

画像アップロードにS3を使用メモ

#herokuでデプロイした際にS3を画像アップローダー先として指定する場合メモ
Rails5.2.3
carrierwave (2.1.0)

carrierwaveで画像をアップロードできる様になっている
またS3という前提で進めます。

外部のストレージを選択しアップロードするのを補助してくれる
fog-awsというgemを追加してbundle installする。

“`ruby:Gemfile
gem ‘fog-aws’
“`

アップロードにfogを使用するための設定を行う。
storage :fileをコメントアウトし
storage :fogのコメントアウトを外す。

“`ruby:app/uploaders/image_uploader.rb
# storage :file
storage :fog
“`

fogのアップロード先の設定をする
/config/initializers直下に、carrierwave.rbというファイルを作成し、
下記のコードをそのままコピペする。

“`ruby:/config/initializers/carrierwa

元記事を表示

インターネットの仕組みを復習

#ルーターとインターネットプロトコル

通信とは相手に、共通認識を与えること
多くの相手と通信ができるようにした仕組みがインターネット

ネットワークでは、物理的な接続と、論理的な道(データリンク)が必要。
データリンクの中の交通ルールがプロトコル

ネットワーク同士を繋げたのが、インターネット

しかし、このままではデータリンクが異なる
それを合わせるために機器などを全て統一するのは不可能、、、

そこで、データリンクは異なったまま、その通信を専用通信機器を通すようにしました

それがルーター

そして、今までのデータリンクも残しながら
インターネットプロトコル(IP)という全く新しいルールを追加

ルーターはIP以下(IP、データリンク)を層をみる機械

IPアドレスを割り振れば、データリンクによらずに共通で使える

データリンクではMACアドレス
IPではIPアドレスを使う
※1つのMACアドレスに対して1つ付与される

IPアドレスは管理が繁雑にならないよう、同じ管理者のネットワークごと(LAN)で
連続した末尾になっている

図解付きの解説はこちら
https://www

元記事を表示

[rails]AWS 課金にならないように各機能を削除する方法

下記、AWS公式ページのリンクです。

Elastic IPアドレスを解放する方法
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-instance-addressing-eips-releasing

S3バケットを削除する方法
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/delete-bucket.html

インスタンスの停止と起動
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Stop_Start.html

元記事を表示

rails dbしてWebサーバー等からMySQLのCLIに繋ぐ

## この記事について

自分用メモです。

## メモ

“`sh
# RAILS_ENVには環境名を入れる
# dbはdbconsoleでも可。
RAILS_ENV=production bundle exec rails db
> passwordを入力

# デフォルトの出力だと見にくいのでlessで結果を見る
mysql> pager less -n -i -S

# 見たいdatabaseに切り替える
mysql> use `hoge-database`;

# 見たい結果を得るためのクエリ
mysql> select * from hoge_table;
“`

元記事を表示

RSpecでsession not created: This version of ChromeDriver only supports Chrome version 81

# どのようなエラーか
systemspecで使用しているブラウザであるchromeと、クロームでテストする際に必要なchromedriverのバージョンが合ってない。

現在使用しているchromedriverはバージョン81のchromeしかサポートしていないと言われている。

chromedriverのバージョンをchromeに合わせるか、chromeのバージョンをdriverに合わせるかをすればいい。

# 解決法

## chromedriverをchromeに合わせる

chromeのバージョンを調べたら83になってた。

なのでdriverも83に合わせる。

### chromedriverのインストール

https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.39/

mac windows linuxいずれかによって適切な物をダウンロードする。

### chromedriverを置き換える

chromedriverは自分の環境の場合、webdriversの中にある

“`

元記事を表示

【NoMethodError】newアクションで発生した際の解決法

# 概要
登録画面に遷移したいのに、エラーになって全然表示できない:sob:
状況に陥り、何時間も悪戦苦闘した結果、解決しましたので備忘録として残します。

## 事象
下記のようなエラーが発生:zap:
スクリーンショット 2020-05-29 11.45.21.png

“`ruby:routes.rb
Rails.application.routes.draw do
devise_for :users
root “groups#index”

resources :users, only: [:edit, :update]

resources :groups, only: [:index, :new, :create, :edit, :update] do
resources :t

元記事を表示

Rails + MySQLで作ったアプリをherokuにデプロイする

※rails初心者向けの記事です。

## herokuのデータベース
herokuはデフォルトのデータベース(以下DB)はPostgreSQLです。
なのでMySQLで作ったアプリをherokuにデプロイするときは次の2つがあります。

① DBをPostgreSQLに変更してherokuにデプロイ
こちらのサイトに大変お世話になりました。本記事では取り扱いません。
[【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】](https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39)

② DBをMySQLのままherokuにデプロイ
本記事ではこちらの方法についての備忘録です。

## この記事でやること
– ClearDBアドオンを追加
– Gemとデータベースをチェック
– MySQLからMySQL2に変更

### ClearDBアドオンを追加
ClearDB はクラウド上で提供されている MySQL データベースです。
クレジットカード必須。
データ容量5MBの最小構成であれば無料

元記事を表示

[Rails6]webpacker-dev-serverがheap out of memory(OOM)エラーで落ちる時の対処方法

RailsでWebpackerを用いフロント開発していたところ、
webpacker-dev-serverがやたらとメモリを食い「heap out of memory」エラーが頻出していました。

Docker環境だからか、VM上でDockerを立てていたからか、仕様かわかりませんが、
最大メモリサイズを指定することでエラーがほぼ出なくなったので、同様の現象が起きている方は参考にしてみてください。

“`
rails 6.0.3.1
ruby 2.6.6
webpacker 5.1.1

フロント:React(bin/webpack-dev-server利用)
サーバー:Rails
“`

## 結論

`bin/webpack-dev-server`に最大のメモリサイズを渡すと、最大メモリに近づいた時にメモリ解放を行ってくれました。

`NODE_OPTIONS`の環境変数に`–max-old-space-size=3072`を加えると最大メモリサイズを設定することができます。

“`ruby:bin/webpack-dev-server
#…
ENV[“NODE_OPT

元記事を表示

OTHERカテゴリの最新記事