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

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

【Docker】Railsサーバが起動しない場合の対処

#はじめに
とあるDockerの教材を学習していた時に表題の通り
railsサーバが起動しなかったため備忘録として記載していますrails&Docker初心者のため間違った見解があればご指摘いただけると嬉しいです。
#結論
忙しい人のために先にどうやって解決したかを記載します

▼server.pidファイルを削除

“`
$ rm tmp/pids/server.pid
“`

▼削除確認されるので「yes」

“`
$remove tmp/pids/server.pid? #yes
“`

▼コンテナを立ち上げる

“`
$docker-compose up -d
“`

サーバー起動で無事解決♪

#問題
【Docker】を使ったrailsの環境構築を以下の流れで設定

“`
$docker-compose run web rails new . –force –database=mysql
//省略//

$docker-compose build
//dockerfileからイメージをビルド//

$docker-compose up -d
//現在のディ

元記事を表示

Railsアプリのテスト実行中に cookies.signed がエラー(undefined) になったときの対処法

こんにちは、[ペーパーエンジニアのよしこ](https://twitter.com/K2_Yoshiko)です。

Ruby on Railsのテストで、Cookies周りのバグに対応しました。
RSpecテスト環境での日本語情報が少なかったので、私と同じ初心者向けに情報共有します。

# バグの内容

ControllerやHelperなどで使われている`cookies.signed[:foo]`をテストで呼び出すと、
NoMethodError: undefined method `signed’ for #\とエラーになりました。

※ `cokkies.permanent` や `cookies.encrypted` でも同様のエラーになります。

“` hoges_controller.rb
class hogesController < ApplicationController def hogehoge pp cookies.signed[:foo] = "bar" end end ``` 上のコ

元記事を表示

ユーザーの更新・表示・削除機能を追加します〜Railsチュートリアル10章〜

この章ではユーザー機能を充実させてRESTアクションを完成させます。
この章で行うことは
プロフィールの更新、認可モデルの実装。ユーザー一覧の追加。ユーザーの削除機能を追加していきます。

#ユーザーを更新する
ユーザー情報を編集するパターンは新規ユーザーの作成と似通っている。
ユーザーを編集するためのeditアクションを作成する。
patchリクエストに応答するUpdateアクションを作成する。
またユーザー情報を更新できるのはそのユーザー自身だけであるよう設定する。

まずeditに対応するアクションとビューを追加する。

アクション

“`
def edit
@user = User.find(params[:id])
end
“`

ビュー

“`
<% provide(:title, "Edit user") %>

Update your profile

<%= form_for(@user) do |f| %>

元記事を表示

Javascriptとrails

#JavaScriptとは
こちらで紹介しています。[JavaScriptについて(素人が浅い知識で書かせていただきました)](https://qiita.com/Tsuyozo/items/108254c80b9a466856f7)

#アセットパイプライン
こちらで紹介しています。[railsのアセットパイプラインと本番環境のデプロイについて](https://qiita.com/Tsuyozo/items/afcf8beacaf71eeaafb5)

#Ajax
サーバーとの通信でデータを受け取り、ページを書き換える時に、
処理をするために別のcontrollerに飛んで、処理後に再度今のページの中身を読み込んで戻ってくるのは処理が多くて遅くなる

Ajaxを使えば今のページのままで、自分の命令が非同期でバックグラウンドで行割れる(今のページの再読み込みをせずに処理できる)。Ajaxの処理は全てJavaScriptが行わせている。

#####Ajaxの実行の仕方
linkにAjaxを仕込む

そのリンクが押されれば、今のページを表示したまま、別の処理を実行する(非同期処理)

元記事を表示

[rails,payjp]カード登録の際に登録画面をリロードしないとトークンを作成できない時の解決例

#1.原因
今回の筆者の問題はturbolinksが効いていたからでした。

#2.なぜ起こった?
理由は、turbolinksの機能が影響範囲ページの遷移を非同期で行う(影響範囲の全てのviewページが合わさって1ページとして扱う)ためでした。
他画面を経由し複数で情報を持った状態でクレジットカードの登録をしようとすると、悪意のある情報を持っている危険性があり安全性を保てないと見なされてしまいpayjpからの返答を受けることができなくなっていました。

#3.解決方法
クレジットカード登録画面のみturbolinks(非同期通信)を切ってページ遷移するように記述することで筆者は解決しました。

具体的には`app/views/layouts/apprication.html.haml(全体のbodyの記述部分)`と`app/views/cards/index(ページ遷移元)`を下記のように修正しました

“`ruby:app/views/layouts/apprication.html.haml
〜前略(header部分の記述は省略します)〜

%body
– if con

元記事を表示

CircleCI で並列実行した RSpec のカバレッジを Coveralls に送る

[Coveralls](https://coveralls.io/) に以下のドキュメントがあるのだけど、書いてある通りにやってもうまくいかなかったので、なんとかうまくいった方法を書いておきます。

– https://docs.coveralls.io/ruby-on-rails
– https://docs.coveralls.io/parallel-build-webhook

# やりたいこと

RSpec を並列で実行し、すべてのインスタンスの終了を待って、別のジョブで各インスタンスのカバレッジの結果をマージして Coveralls に送信したい。

– [ドキュメント](https://docs.coveralls.io/ruby-on-rails)には `Coveralls.wear_merged!` を呼んで最後に `coveralls:push` を実行しろとあるけれど、`coveralls:push` (`Coveralls.push!`) で使われている `SimpleCov::ResultMerger.merged_result` は *同じ環境で実行された*

元記事を表示

【Rails】deviseを使用した簡単なログイン機能まとめ

# はじめに
学習中の備忘録です。
# 概要
新規アプリ作成の際にdeviseのコマンドなど忘れるのでまとめ。

– 導入
– devise設定ファイル作成
– モデル作成
– ビューファイル作成
– deviseによって設定されるPrefixの一部

# 前提
rails 5.2.3

# 導入
gemファイルに追記

“`:Gemfile
gem ‘devise’
“`
インストール

“`:ターミナル
$ bundle install
“`

サーバー再起動

“`:ターミナル
$ rails s
“`

# deviseの設定ファイルを作成

“`:ターミナル
$ rails g devise:install
“`
新規作成されるファイル

– config/initializers/devise.rb
– config/locales/devise.en.yml

#モデル作成

“`:ターミナル
$ rails g devise user
“`
新規作成されるファイル

– app/models/user.rb
– db/migrate/20XXXXXX

元記事を表示

ラベル機能実装後、検索のテストをしていたらPG::AmbiguousColumn: ERROR

# ラベルでの検索も実装し、そのSystem Spec中にタイトルのエラーが発生

System Spec中に……と書いてあるものの、テストを書き色んなパターンを試した結果、見落としていたエラーを発見した、というのが正しいです。

## 前提

タスク管理アプリを作成中。
タスク名、ステータス(未着手、着手、完了)での検索は実装済み。
今回、タスクにラベル(タグのようなもの)を付けられるようにし、そのラベルでもタスクを検索できるように実装。
その機能のテストを書いている時に起こったエラー。

### テーブル構成

TaskテーブルとLabelテーブルがあって、多対多を実現するためのLabelingという中間テーブルがある。

“`ruby:schema.rb(一部略)
create_table “labelings”, force: :cascade do |t|
t.bigint “task_id”
t.bigint “label_id”
t.datetime “created_at”, null: false
t.datetime “upda

元記事を表示

[*Rails*] deviseの使い方(rails6版)

# はじめに
Rails6での再再検証版です。
以下のRails5のときのものをRails6で実行し、一部変更になっている部分を反映したバージョンです。
[[*Rails*] deviseの使い方(rails5版)](https://qiita.com/cigalecigales/items/f4274088f20832252374)

“`
【前回】
rails : 5.0.0.1
ruby : 2.3.1
devise: 4.2.0

【今回】
rails : 6.0.2.2
ruby : 2.7.1
devise: 4.7.1
“`

# deviseとは
ユーザー登録して、送られてきたメールのリンクをクリックして本登録して、ログインして、パスワード忘れたら再設定して、何回もログインミスったらアカウントロックして…などといった認証系アプリに必要な機能を簡単に追加できる便利なgemです。

## 1. gemのインストール

### 1. プロジェクトの作成
新しいプロジェクトを作ります。

“`bash
$ rails new devise_rails6
$ cd

元記事を表示

MVCとは

##MVC
Model(モデル)
View(ビュー)
Controller(コントローラー)
の頭文字です。
役割としては
Model(モデル)
ビジネスロジック(データ処理)を行う
View(ビュー)
表示処理を行う
Controller(コントローラー)
リクエストに応じて適切な処理を呼び出す
##MVCの流れ
ルーティング=>コントローラー
リクエストに対応したルーティングが読まれ、それに対応したコントローラーのアクションが動きます。
コントローラー=>モデル
コントローラーで呼び出したアクションをモデルを通してデータベースから必要なデータを呼び出します。
コントローラー=>ビュー
呼び出したデータをビューに受け渡し、受け取ったデータをWebページに表示させます。

元記事を表示

[Rails]本番環境でSeed-fuを使う

#本記事投稿のいきさつ
railsでアプリを作成している中で、Seed_fu Gem を使用しました。
その際、開発環境では上手くテーブルにデータを格納することができたのですが、本番環境で苦戦したため備忘録として書きます。
ここでは、自分が苦戦したEC2内でのコマンドのみを書きます。

## エラー(異なるディレクトリでコマンドを入力していたため)
自分が作成したアプリのディレクトリへ移動しコマンドを入力したところ

““
Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
““

と、mysplに接続ができないというエラーが発生。
これはコマンドを入力するディレクトリが誤っていたため発生したエラーでした。
実は開発環境とは異なり、本番環境ではcurrentディレクトリ内のデータが本番環境で動いているフォルダ群になります。
そのためcurrentディレクトリへ移動した後、再度コマンドを入力します。

““
cd c

元記事を表示

【rails】ユーザに紐づくデータをユーザ登録時に生成するための実装方法

新規ユーザ登録時に、ユーザに紐づくデータを生成するよう実装した。
具体的には、新規ユーザが登録されたときに、外部キーとしてuser_idを持つFolderモデルとTagモデルのデータが生成されるようにした。

Gemfile

“`Gemfile
gem ‘devise’
“`

### devise導入

“`
bundle Install
rails g devise:install
rails g devise User
“`

### DeviseControllerのカスタマイズ

※認証ユーザーのモデルはUser

“`
rails g devise:controllers users

# rails g devise:controllers [scope]
“`

app/controllers/users 以下に次のコントローラが作成される。

・confirmations_controller.rb
・omniauth_callbacks_controller.rb
・passwords_controller.rb
・registrations_cont

元記事を表示

[Docker] webコンテナからdbコンテナへの接続方法

“`php:docker-compose.yml
:docker-compose.yml
version: ‘3’
services:
db:
container_name: local-mysql
image: mysql:5.7
volumes:
– ./db/mysql_data:/var/lib/mysql
environment:
MYSQL_DATABASE: ‘local-mysql-db’
MYSQL_PASSWORD: password
MYSQL_USER: root
ports:
– “3306:3306”
networks:
– app-net

web:
container_name: “local-application”
build: .
command: rails s -p 3000 -b ‘0.0.0.0’
volumes:
– .:/fishingshares
port

元記事を表示

selfを使って、undefined methodエラーを解消

## はじめに

Modelで定義したメソッドがControllerで呼び出せなくなったとき、
selfを使って2パターンの解決法を見つけたため、記録として残しておく。

今回は、helloという名前のメソッドをモデルで定義するという設定とする。

## 解決法1(特異メソッド方式)

“`post.rb
class Post
def self.hello
puts ‘hello’
end
end
“`

メソッド名の前にself.をつけるやり方

ruby初学者なら何度も見たことのある形だ。

## 解決法2(特異クラス方式)

“`post.rb
class Post
class << self def hello puts 'hello' end end end ``` こちらでも、きちんとcontrollerで呼び出すことができた。 この場合だと、メソッド名の前にself.を書く必要もないし、class << self と end内であれば、 複数のメソッドを同じように定義できるのがメリットだ。 ```post.

元記事を表示

Active jobでの非同期処理

#非同期処理とActive job
非同期処理とはAという作業と同時に別のBという作業を行うこと(マルチタスク、並列作業)。通常はAという作業の後にBという作業をするように一つ一つしか行えない[非同期処理と同期処理の実装パターンと特徴](http://ossforum.jp/node/753)。しかしrailsではActive jobを用いて必要なツールのインストールを行って実行する。ここではsidekiqの例をあげます。

#準備、設定
sidekiqによる非同期処理を行うにはredisサーバーが起動していないといけないので、まずredisをマシーンにインストール。

redisのサーバーを起動

gemを使ってsidekiqをアプリにインストール

bundle exec sidekiqでsidekiqを起動

config/environmentsでその環境でsidekiqを使用することを記述

#ジョブを作成、実行
ジョブとはメインの処理とは別に並行的にバックグラウンドで行わせる処理のこと。ジョブを実行するにはジョブを定義し、読み出さないといけない

rails g

元記事を表示

Rails5.2以降でのcredentials.yml.encの読み込み方

# PAYJPのAPIが読み込めず、クレジットカードの登録ができない
PAYJPを使ってクレジット決済の導入をしたところ、
クレジットカードの登録をしようとすると下記のようなエラーがでました

スクリーンショット 2020-04-04 21.15.33.png

PAYJPの導入はQiita記事参照してください
[RailsでPayjpを使った購入機能を実装する
](https://qiita.com/suzy1031/items/7964829086eb929471a6)

# PAYJPと連携するためのキーが読み込めていない
Rails5.2以降からはAPIのキーなど環境変数に設定するためのものは
`credentilas.yml.enc`に記載するようになりました

詳しくはこちら
[Rails5.2から追

元記事を表示

rails 通知機能

#はじめに
今回は通知機能を作成しました。
こちらの記事を参考にさせていただいております。
https://qiita.com/nekojoker/items/80448944ec9aaae48d0a
https://qiita.com/yuto_1014/items/2db1dd4fcd7945b980f7

###作るもの
コメント・いいね・フォローされた時に通知を作成して確認・削除できる機能を作成します。すでに上記の機能はあるものとして作成してます。どれか一つでも機能があればOK。参考に過去に投稿したコメント・フォロー機能についてリンクを載せておきます。
コメント機能:https://qiita.com/E6YOteYPzmFGfOD/items/ef776d34908872ea19f7
フォロー機能:https://qiita.com/E6YOteYPzmFGfOD/items/ec0492b509962c3b7ae4

#ER図
参考に今回作成する通知機能のER図です。(今回関係ないタグ機能がありますが無視してください。)
スクリー</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/E6YOteYPzmFGfOD/items/c780dd686a81a8ca32e8'>元記事を表示</a></div>
<h3 id=【VScode】なぜか自動保存できねえ時の解決法、そしてパーミッション関連のことも【備忘録】

# 【VScode】なぜか自動保存できねえ時の解決法
設定でAfterdelayなどにしてファイルの自動保存機能をつけているVScodeで開発しているときに、
以下のようなエラーが出て、自動が保存ができないような事態の解決法を紹介します
![エラー1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411851/a9053cfd-8522-1018-9c97-13f684b85d7e.jpeg)

[アクセス権限が不十分です。[Sudo 権限で再試行]を選択してスーパーユーザーとして再試行してください。]
と出ております。
つまり、現在、Sudoユーザーとして、ファイルにアクセスできていない状態なので、
・スーパーユーザーにモードを変える
・ファイル、あるいはフォルダのアクセス権限(パーミッション)を変更する
方法があります。

今回は後者の手段を用いて、このエラーを解決します。

“`:terminal
sudo chmod -R 777 ファイルのディレクトリ位置(Ex. /Users/kazuhi

元記事を表示

【AWS】デプロイ関連で詰まった箇所

# デプロイ

## bundler: failed to load command: puma

### 解決法
[参考記事](https://qiita.com/Esfahan/items/489677a673e9c200686b)

## AssetsPrecompile関連エラー

Precompile = 1つのファイルにまとめる(圧縮する作業)

“`:ターミナル
# アセッツプリコンパイル
$ bundle exec rake assets:precompile RAILS_ENV=production
“`

### 解決法

#### yarnのインストール

“`console:ターミナル
$ curl -o- -L https://yarnpkg.com/install.sh | bash
$ source .bashrc # 反映
$ yarn -V # yarnインストール
“`

“`ruby:config/environments/production.rb
config.assets.js_compressor = :uglifier

#

元記事を表示

初心者の気持ちがわかる!! Railsチュートリアル第1章(1.3)

#初心者の気持ちがわかる!!Railsチュートリアル 1.3
##Railsチュートリアル (1.3)
###1.3 最初のアプリケーション
さっそくWebページに「hello,world!」を表示してみましょう。

と、その前に今回のRailsプロジェクトで使うためのenvironmentディレクトリを作成しましょう。(Cloud9 IDEを使用している人は元からあるので不要)

“`リスト1.2
$ cd # ホームディレクトリに移動する
$ mkdir environment # ‘environment’ ディレクトリを作成する
$ cd environment/ # ‘environment’ ディレクトリに移動する
“`

実際に使いながら学びたい人は

[ドットインストールのUNIXコマンド入門 一般ユーザー編 (全24回)](https://dotinstall.com/lessons/basic_unix_v2)
をやってみよう。

cdやmkdirなどのunixコマンドは以下で確認。
![スクリーンショット

元記事を表示

OTHERカテゴリの最新記事