- 1. はじめに
- 2. なぜ
- 3. 環境
- 4. 今の環境とRubyの準備
- 4.0.1. deviseのみを用いて2つの異なるログイン機能を実装する方法(ruby on rails)
- 4.0.2. Windows環境でVSCodeでのRuby on Railsの開発環境構築手順
- 4.0.3. やさしい図解で学ぶ 中間テーブル 多対多 DB データベース joinモデル 概念 【初級者用】
- 4.0.4. gem ‘devise’に苦戦 プログラミング 37日目
- 4.0.5. Model名とController名が異なっていてもデータ移動はできるらしい 学習37日目
- 4.0.6. 【AWS EC2】bundler -v -bash: bundler: コマンドが見つかりません
- 4.0.7. Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #14 ユーザ投稿表示, ページネーション編
- 4.0.8. メモ:minitest-reporters導入方法
- 4.0.9. #Rails + #rspec OPTIONS request test by ActionDispatch::Integration::Session.proccess
- 4.0.10. eager_load + find_by でクエリが2回発行される件の対策
- 4.0.11. AWS Elastic Beanstalkで定期処理実行(cron)
- 4.0.12. またお前か mysql2 gemのインストール失敗
- 4.0.13. link_to をブロックで囲って each で回す方法(link_to do ~ end)
- 4.0.14. [メモ]2019/11/15 Ruby on Rails
Rails チュートリアル 11章 独学学習メモ
こちらは『[Railsチュートリアル](https://railstutorial.jp/chapters/beginning?version=5.1#sec-introduction)』の独学学習のメモになります。
環境について
– Macを使用
– cloud9を利用#第11章
これまでの実装では、アカウント登録をした時点で、すべての機能にアクセスができるようになっています。
しかし、安全性を考え、メールアドレスの持ち主か確かめるために、メールでの本人確認をしていきます。
そして、メールアドレスを忘れた時には、リセットの手段として、メールアドレスを使用するため、メールアドレスの本人確認がより重要になります。
#11.1 AccountActivationsリソース
具体的には、このようにしていきます。
>1.ユーザーの初期状態は「有効化されていない」(unactivated) にしておく。
2.ユーザー登録が行われたときに、有効化トークンと、それに対応する有効化ダイジェストを生成する。
3.有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールア
ぼくはこんな記事を書いてきた
記事タイトルは立花隆『[ぼくはこんな本を読んできた](https://books.bunshun.jp/ud/book/num/9784163510804)』のパロディー。
ふとマイページを見たら,これまでに書いた記事が 99 本であることに気づいた。
100 本目は何を書こうか。思いつかないので過去記事を振り返ってみた。
101 本目以降の記事も必要に応じて追記していくことにする。# Ruby
やっぱり Ruby の記事が多い。
## 初心者向け
Ruby の初心者に知ってもらいたいこと。
* [Ruby のエラーメッセージを読み解く(初心者向け)その 1](https://qiita.com/scivola/items/3017068a354892b239f4)
エラーメッセージが読めるようになるのが中級への第一歩。
* [Ruby のエラーメッセージを読み解く(初心者向け)その 2](https://qiita.com/scivola/items/77017693de371ab49667)
この続きを書くつもりだが,果たせていない。
* [Ruby の文
Dolphinというシングルユーザー用のActivityPub serverを立ててみた
activitypubというprotocolがあります。わかりやすく言うと、分散snsのprotocolです。このprotocolを使ったserverで有名なのはmastodonです。
今回、misskeyというmastodonに似たプロジェクトがあるのですが、その姉妹プロジェクトであるdolphinがシングルユーザー、つまり、お一人様インスタンスと呼ばれるサーバーに特化しているようなので、herokuで立ててみました。
https://github.com/syuilo/dolphin
“`sh
$ git clone -b master git://github.com/syuilo/dolphin.git
$ cd dolphin
$ cp .config/example.yml .config/default.yml
$ npm i$ heroku create $APP_NAME
$ ls -a ./.git
$ heroku git:remote -a $APP_NAME
$ heroku buildpacks:set https://github.com/
Rails6系にadmin-lte入れてHerokuにデプロイするとコケるエラーの解消法
## プッシュしたときのエラー内容
“`
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 21.87 KiB | 3.12 MiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files… done.
remote: Building source:
remote:
remote: —–> Ruby app detected
remote: —–> Compiling Ruby/Rails
remote: —–> Using Ruby version: ruby-2.6.3
remote: —–> Installing dependencies using
【解決】Herokuデプロイで躓いた1年前の自分へ
## railsでアプリを作ってこれからデプロイするところからのスタート!!
とりあえずherokuにログイン
“`
$ heroku login
“`herokuにアプリ作成
“`
$ heroku create
“`precompile
“`
$ rails assets:precompile
“`herokuのbuildpackにrubyパッケージセット
“`
$ heroku buildpacks:set heroku/ruby
“`herokuのbuildpackにnodejsパッケージ追加
“`
$ heroku buildpacks:add –index 1 heroku/nodejs
“`ひとまずmasterにpush
“`
$ git add .
$ git commit -m ‘heroku’
$ git push origin master
“`herokuへデプロイ!
“`
$ git push heroku master
“`herokuでdb:migrate
“`
$ hero
ローカル環境にRailsの環境を構築
はじめに
Ruby on Railsの環境構築に関する記事はたくさん存在するので、自分の備忘録的にメモ程度に残す
なぜ
Railsチュートリアルをやる上で、AWS Cloud9を使ってたんですが、ローカルにあったほうが便利じゃね?と思った
https://railstutorial.jp/環境
OS:macOS Mojave
今の環境とRubyの準備
Rubyはrbenvでいれる。
“`bash
$ which ruby
/usr/bin/ruby
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
“`
こちらを参考に環境構築していきます。“`bash
$ brew install rbenv ruby-build
…
.
deviseのみを用いて2つの異なるログイン機能を実装する方法(ruby on rails)
# はじめに
久しぶりの投稿になります。(最近コーディング以外のことをやっていたせいでqiitaに記事が書けなかった^^;)
ECサイトの開発でrails-admin等の管理者機能作成gemを使わずに、deviseのみを用いて管理者とユーザーのログイン機能を実装した時に思いのほか詰まったので備忘録がてらメモを残しときます。
開発環境
仮想環境:Linux(vagrant)
rails 5.2.3
ruby 2.5.7##サンプルプロジェクトの作成
まずはrails newでサンプルとなるプロジェクトの作成を行いましょう。“`ruby:コンソール
$ rails new devise-sample
“`
これでサンプルプロジェクトの作成完了です。##deviseのインストール
まずはgemファイルにdeviseを入れてましょう。(私は毎回ファイルの一番下にdeviseを追加しています)“`ruby:Gemfile
.
.
.
gem ‘devise’
“`“`ruby:コンソール
$ bundle install
“`“`ruby:コンソール
Windows環境でVSCodeでのRuby on Railsの開発環境構築手順
※ Rubyの推奨環境はLinux?とはいえWindowsしか持ってないよ!って人向けです
# 1.Rubyのインストール
Rubyで開発する上で、最も必要なものはRubyのインストールなので
https://rubyinstaller.org/downloads/
からRuby + Devkitをダウンロードするダウンロードしたらexeファイルを実行してインストールをする
インストールしたら、
“`
ruby -v
“`
コマンドを実行、バージョンが表示されたならばOK
バージョンが表示されなければ、Rubyをインストールしたパスの下の/binフォルダにパスを通す2.Git bashのインストール
https://gitforwindows.org/
からgitをダウンロードし、インストールする3.VSCodeのインストール、環境整備
https://code.visualstudio.com/
より、VisualStudioCodeをダウンロードし
exeファイルを実行してインストールするEXTENSIONSを選択し、Rubyを選択してこれもインストー
やさしい図解で学ぶ 中間テーブル 多対多 DB データベース joinモデル 概念 【初級者用】
#中間テーブルって?
“join table もしくは junction table”とも呼ばれ、2つのテーブル(エンティティ)を結びつける、結合テーブルを指します。
とりあえず、下のER図を見てみましょう。
テーブルとテーブルの間にそれぞれを繋げるテーブルがあります。
これが”**中間テーブル**”です。(ER図の見方は[こちら](https://qiita.com/ramuneru/items/32fbf3032b625f71b69d))2つのテーブル、この場合coursesテーブルとusersテーブルの間に
### ” 多対多 ”
の関係性が生まれた時、マルチカラムアトリビュートを避けるため、1つの解決方法としてこの中間テーブル
gem ‘devise’に苦戦 プログラミング 37日目
##gem’devise’使う上で考慮すべきこと
**1.URLかぶり**例えばdeviseをuserモデルに紐づけてinstallしたりすると以下のような(一部)routesが自動的にできます。
**URLかぶりとは??**
userのアカウント情報を表示させるusers/showを作ろうと、get “users/:id” => “users#show”をroutesの設定しました。そうするとそれまでできていたlogoutがうまくいかなくなりました。その原因として考えた結論が、users/:idとdeviseで設定した他のusers/~~~が被ってしまっているということです。(あっているかは定か)**usersはやめpages/:idにすることで解決しました。**
“`
new_user_session GET /users/sign_in(.:format) devise/sessions#ne
Model名とController名が異なっていてもデータ移動はできるらしい 学習37日目
##〇〇モデルのデータは□□コントローラー上でも使える##
UserモデルのデータはUsersコントローラーで,Pageモデルのデータはpagesコントローラーでという**大きな思い込み**をしていた。(冷静に考えれば、application.html.erbはいろんなモデルからデータを取ってきている)
#勘違いしていたこと#
**1.モデルとコントローラーのデータのやり取りは、同じ名前同士で行う。←そんなことない!**
UserモデルのデータはUsersコントローラーで,Pageモデルのデータはpagesコントローラーでという**大きな思い込み**をしていた。(冷静に考えれば、application.html.erbはいろんなモデルからデータを取ってきている)
**2.controllerの内容を継承したければコピペする←それだけではない!**
確かにuserscontrollerの内容をそのままpagescontrollerでも使いたければ、コピペも1つの手段になる。しかしめんどくさいのでclassを継承をすれば良い(pagescontroller
【AWS EC2】bundler -v -bash: bundler: コマンドが見つかりません
rbenvうっかり入れ忘れなので、下記のコマンドを入力すればOK。
バージョンはご自身の環境に合わせてください。“`
$ rbenv install 2.5.1
$ rbenv global 2.5.1
$ rbenv rehash #rehashを行う
$ ruby -v # バージョンを確認
“`
Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #14 ユーザ投稿表示, ページネーション編
# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい前回:[#13 パスワード再設定編](https://qiita.com/aokyo17/items/28e12c9ad40cac9e528b)
次回:準備中# 今回の流れ
1. 投稿用のモデルをつくる
* サンプル投稿を表示する
* テストをつくる[Tutorial13章(第4版)](https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts)に突入しました。
今回はユーザ投稿の表示とページネーションを実装します。
(投稿機能は#15(準備中)で紹介します。)# 投稿用のモデルをつくる
ここでの手順は以下の通りです。* Micropostモデルをつくる
* Userモデルを編集する
* バリデーションを追加する
* Micropostモデルを改良する
* エラー時の日本語化を行う## Micropostモデル
メモ:minitest-reporters導入方法
書くことが無いので、rails testの結果が見やすくなるgem、「minitest-reporters」の導入方法をメモしておこうと思う。
#導入方法
Gemfileの「group :test do」の中に以下のように導入。“`
group :test do
gem ‘minitest’
gem ‘minitest-reporters’
end
“`加えて、test_helper.rbに以下の二行を追加。
“`ruby:test_helper.rb
require ‘rails/test_help’
require “minitest/reporters” #1行目
Minitest::Reporters.use! #2行目
“`
gem ‘minitest’にどういう役割があるのか、調べてもイマイチよくわからなかったが…
どうやらRailsのテストの方法はいくつかあるようで、minitestというのはそのうちの一つらしい。
今のところはminitest-reportersの前提modならぬ前提gem的な存在だと思っておくことにする(適当)。
#Rails + #rspec OPTIONS request test by ActionDispatch::Integration::Session.proccess
# example
“`rb
describe ‘options’ do
subject { process :options, ‘/’ }before { subject }
it { … }
end
“`# Ref
[Perform HTTP OPTIONS request from Rails 5 for CORS pre-flight or otherwise – Stack Overflow](https://stackoverflow.com/questions/39840077/perform-http-options-request-from-rails-5-for-cors-pre-flight-or-otherwise)
[ActionDispatch::Integration::Session](https://api.rubyonrails.org/v5.1.1/classes/ActionDispatch/Integration/Session.html#method-i-process)
# Or
eager_load + find_by でクエリが2回発行される件の対策
### 結論
よくある1:NのRelationがある時“`ruby
class User < ApplicationRecord has_many :comments end class Comment < ApplicationRecord belongs_to :user end ``` ```ruby User.eager_load(:comments).find_by(id: 1) ``` とかすると 1. User.find_by(id: 1) のSQL 2. User.eager_load(:comments) のSQL の2回SQLが発行される ```ruby User.eager_load(:comments).where(id: 1).load.first ``` とかするとクエリが1回になる。 (`.load` は `.to_a` とかでもOK) ~~~ ruby 2.5.1 rails 5.0.6/6.0.1(下記ログは6.0.1のものです) ~~~ で確認済み。 #### 詳細 普通にやってみたりしたけど、どうして
AWS Elastic Beanstalkで定期処理実行(cron)
## Heroku Schedulerでできたことを、Elastic Beanstalkでも行いたい
運用しているRailsアプリの本番環境を、HerokuからElastic Beanstalkに移行させました。
その際タスクの定期処理を行う方法で少し苦労したので、メモ的にシェアしておきます。以前はHeroku Schedulerでrakeコマンドを呼び出せましたが、EBでそれを行うにはEC2内でcronを使うか、ワーカー環境でPOSTメソッドを呼び出す方法があるみたいです。今回は安く済ませたいので、前者を選びました。
後者の方法はこちらが参考になります。
https://qiita.com/tomoeine/items/38a9b2123e3afa1d5cd0## 方法
このファイルを.ebextensionsに置くだけでOKです。あとは`eb deploy`すれば、自動でcronのファイルを作成し自動実行してくれます。
`eb ssh`で/etc/cron.dを確認してみてください。“`configuration:.ebextensions/cron-sample.c
またお前か mysql2 gemのインストール失敗
## 問題
これと関連がある記事を今まで2回作成しましたが、また新たな環境でmysql2 gemのインストールに失敗しました。
既存の方法ではないやり方で解決したので、記事を作成しました。“`sh
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.current directory: /Users/jhpark/works/practice/js/react_with_rails/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/ext/mysql2
/usr/local/var/rbenv/versions/2.6.5/bin/ruby -I /usr/local/var/rbenv/versions/2.6.5/lib/ruby/2.6.0 -r ./siteconf20191115-56779-10cp3mw.rb extconf.rb
checkin
link_to をブロックで囲って each で回す方法(link_to do ~ end)
“`Rails:user/index.html.rb
<% @users.each |user| do %>
<%= link_to user_path(user) do %>
<%= @user.name %>
<% end %>
<% end %>“`
上記のように、link_to do〜end で囲えば良い。
[メモ]2019/11/15 Ruby on Rails
##Railsでページを表示するのには以下の3つのファイルが必要
ページの作成に必要なもの
・ビュー(View)
・コントローラ(Controller)
・ルーティング(routing)1. ビュー(View)
ビュー(View)とはページの見た目を作るHTMLファイル。
ブラウザとのやり取りの中で,Railsからビューが返されページが表示される。2. コントローラ(Controller)
ページを表示するときに、Railsではコントローラを経由してビューをブラウザに返す。
「rails g controller home top」を実行したとき、「home_controller.rb」というコントローラファイルが生成され、ファイルの中に「topメソッド」が追加される。
コントローラーのメソッドを「アクション」と呼ぶ。メソッドとは、「オブジェクト(もの)の操作を定義したもの」
例)オブジェクト:マリオとすると
メソッド 操作
・ジャンプする。
・走る
・しゃがむetc…
3. ルーティング(routing)
ブラウザとコントローラを繋ぐ。ページが表示されるま