- 1. Railsで判定機能を作って遊ぶ[Find the missing letter]
- 2. Railsのcase文で色々遊ぶ
- 3. Capistrano + Unicornでデプロイが反映されない時
- 4. fly.ioへのRailsアプリデプロイ備忘録
- 5. [管理画面] 管理画面へのログイン機能、管理画面トップページの作成
- 6. 今話題の脆弱性について自社サイトは大丈夫ですか?
- 7. Rails – コントローラーで特定アクションだけ before_action をスキップする例 ( skip_before_action )
- 8. 【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
- 9. Dockerを使ってRails+Elasticsearchの環境構築
- 10. 特定ドメインへのコールバックなどをlocalhostでテストしたい
- 11. RailsのJSONカラムをちゃんとバリデーションする
- 12. [Rails]アプリの雛形作成について
- 13. Satoruyaで敢えて採用しなかったライブラリ
- 14. 3-13. 詳細ページを表示しよう
- 15. 3-12. ツイートを投稿しよう – index
- 16. 3-8. ツイートを投稿しよう – new
- 17. 管理者側ジャンル機能の作成の仕方
- 18. Carrierwaveとfog-awsを利用したS3へのアップロードが正常にできるまでに試したこと
- 19. 【Rails】DB接続のないログイン画面でバリデーションする
- 20. 【解決】EC2にてアセットファイルをコンパイルしたときにエラーが出た。
Railsで判定機能を作って遊ぶ[Find the missing letter]
# ルール
“`
アルファベットが順番に定義された配列が存在する.
だが、順番の中で1つ抜けているものがあるからそれを特定する。
大文字・小文字のパターンがあるので注意する。
“`# テストコード
“`
Test.assert_equals(find_missing_letter([“a”,”b”,”c”,”d”,”f”]), “e”)
Test.assert_equals(find_missing_letter([“O”,”Q”,”R”,”S”]), “P”)
Test.assert_equals(find_missing_letter([“b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“a”,”b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“b”,”d”,”e”]), “c”)
“`# リファクタリング前の判定メソッド
次のアルファベットを判別するために、ハッシュで次のアルファベットを取れるように定義した。
この時に、小文字のパターンしか
Railsのcase文で色々遊ぶ
# 遊ぶ
暇だったので色々rubyの問題を解いていたのだが、こういう簡単なお題でも色々書き方があって面白い。“`
#### ルール
下記4つの文字列をもとに計算するメソッドを作る。iは値を+1
dは値を-1
sは値を二乗
oは値を配列に出力#### 条件
1. メソッド名はparseで、ランダムなStringの値が引数としてくる。
2. idso以外の文字列も引数として与えられるため、紛れ込んでても対応する
“`テストの値
“`ruby
expect(parse(“ooo”)).to eq([0, 0, 0])
expect(parse(“iiisdoso”)).to eq([8, 64])
expect(parse(“ioioio”)).to eq([1, 2, 3])
expect(parse(“idoiido”)).to eq([0, 1])
expect(parse(“isoisoiso”)).to eq([1, 4, 25])
expect(parse(“codewars”)).to eq([0])
`
Capistrano + Unicornでデプロイが反映されない時
Capistrano + Unicornの環境で構築すると、デプロイした内容が反映されない時がある。
ググってみると「stop → startすれば直るよ」と書いてある記事をよく見かけるが、それだと無停止デプロイできないし本番で使えないだろ、と思って原因を調べてみた。# 原因
capistranoはデプロイ日時14桁のディレクトリを作成して、そこに新しいリソースをチェックアウトし、参紹ディレクトリを切り替える仕組みだが、これが古いディレクトリのままになっていた。
ページ内で `__dir__` で現在のファイルのディレクトリパスを画面上に出すようにしたら、デプロイ後もデプロイ前のディレクトリになっていた。`capistrano/current` のリンク先は正常に変わっていたので、**変わったリンク先を見てくれていないのが原因**と判明。
# 対策
## working_directoryを絶対パスに変更
unicorn.rbの設定方法の記事をみると、大抵の記事が以下のように書いてある。
“`config/unicorn.rb
app_path = File.exp
fly.ioへのRailsアプリデプロイ備忘録
### 概要
herokuの無料版が11月28日に終了するため、
Railsアプリを**fly.io**にデプロイし直しました。
備忘録として実施手順を残します。—
### 環境
Ruby on Rails : 6.1.7
ruby : 3.0.1
postgresql : 14.6
macOS : 13.0.1—
### デプロイ手順
#### fly.io利用準備
インストール〜アカウント登録〜サインイン
“`shell:ターミナルにて
brew install flyctl # flyctlのインストールflyctl auth signup
# アカウント登録
# Webサイトが開くので画面にしたがって登録
# GitHubアカウントでも登録可能flyctl auth signin
# サインイン
# Webサイトが開くので、「Try Fly.io for free」でサインイン
“`
#### デプロイ準備
必要ファイル生成〜一部ファイル修正
“`shell:アプリのルートディレクトリのターミナルにて
fly launch # デプロイに必要なフ
[管理画面] 管理画面へのログイン機能、管理画面トップページの作成
## タスクの分解
管理画面には一般のユーザーには出来ない「他のユーザーや、ユーザーが作成したコンテンツ情報を編集、削除」できるような機能があります。どのユーザーもその機能を使えるのではなく、専用のログイン画面を設けて管理者アカウントだけが機能を利用できるように制限する必要があります。
ユーザーに「権限」というカラムを新たに追加して「一般」ならログイン不可、「管理者」ならログインして管理画面を利用できるようにします。
この時点で「管理者用のログイン画面作成」や「ユーザーに権限判定用のカラム追加」と言ったタスクが見えてきたと思います。
また管理者用のアカウントは rails console などで毎回作成するのは面倒なので、Seedデータを用意しておきます。
それらに関連して「一般ユーザーがログインした場合はリダイレクトさせる」や「ログイン画面の見た目を整える」と言ったタスクも必要です。
ここでは、AdminLTE という公開ライブラリを利用して、管理画面用のCSSやJavascriptを適用します。
ライブラリはcloneしてローカルにCSSなどのファイルを配置しても適
今話題の脆弱性について自社サイトは大丈夫ですか?
今某サイトの下記の脆弱性が話題です
最近弊社ではRuby on Railsなので自社での状況を確認しました
# 1. 認証CookieにSecure属性をつけていない
## どのような問題が?
HTTP通信でCookieが送られてしまうため、暗号化されていないため、信用できないWiFiを利用した場合などに、登録している情報ややり取りの履歴が盗まれる可能性がある。## 参考情報
> Secure 属性がついた Cookie は HTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でない HTTP では決して送信されないため、中間者攻撃者が簡単にアクセスすることはできません。(URL に http: を含む) 安全でないサイトは、 Secure 属性を使用して Cookie を設定することができません。
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies## 弊社での対策
### 1. Secure属性を付与する
“`ruby:config/environments/product
Rails – コントローラーで特定アクションだけ before_action をスキップする例 ( skip_before_action )
“`rb
class FooController < ApplicationController skip_before_action :foo_method, only: [:index] def index ... end end ``` # チャットメンバー募集 何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。 https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ # Twitter https://twitter.com/YumaInaura
【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
## 1. はじめに
初心者の場合だと、バリデーションは特に何も考えずにモデルで定義しているという人は結構いるのではないでしょうか。ただ業務で開発していたり、自主アプリの規模が大きくなってきたりすると、「モデルで定義する方法が最適解なのか?」という疑問が湧いてくる場面があると思います。私も業務で開発していて、この辺が気になり始めた1人です。せっかくなので今回バリデーションレベルについて調べて、あれこれ考えたことをこの記事に残しておこうと思います。同じような人の役に立てばと思います。
※以下はRailsの想定で話を進めています(考え方自体はフレームワークを超えて共通した内容かと思います)
## 2. 4パターンのバリデーションレベル
さて、そもそもバリデーションレベルは4パターンあります。それが以下の通り。① モデルレベル
② データベースレベル
③ コントローラレベル
④ フロントエンドレベル1つずつ詳しく見ていきます。
## 3. ①モデルレベル
#### メリット
* データベースに依存しない
-> バリデーションの仕組み(データベース制約等)がDBに依存するみ
Dockerを使ってRails+Elasticsearchの環境構築
# はじめに
Dockerを使ってRails+Elasticsearchの環境を構築したいと思ったので作成してみました?### 各種バージョン
・OS Mac
・チップ Apple M1
・Ruby 2.7
・Ruby on Rails 6.1.7
・docker 20.10.21
・docker-compose 2.12.1# 手順
1. ファイル構成
2. アプリを作成する
3. イメージをビルドする
4. データベースを接続する
5. 動作確認## 1. ファイル構成
全体の構成は以下のようになっています
““
% tree .
.
├── Dockerfile
├── Dockerfile-elasticsearch
├── Gemfile
├── Gemfile.lock
├── docker-compose.yml
└── entrypoint.sh
““6つのファイルを作成してください?
““
touch Dockerfile
touch Dockerfile-elasticsearch
touch Gemfile
touch Gemfile
特定ドメインへのコールバックなどをlocalhostでテストしたい
## やりたいこと
Oauth2認証などリダイレクトが入るAPI関連で申請するURLがlocalhostが許可されないとき、手軽に動きをチェックできない。
※環境はmac前提、コマンドは違えどLinuxでもできると思う。## 指針
1\. /etc/hostsにドメイン記載して、ローカルApacheやNginxのVirtualHostで実現
* railsなどポートのこと考えるとちょっと面倒。2\. /etc/hostsにドメイン記載して、localhostの80,443をrailsのポートにフォワード
* 設定はややこしい、ちょっと知識も必要### VirtualHost
これはある程度調べたら出るので割愛&今回は採用しなかった。## ポートフォワードで実現
まず考えるのは
* localhostの80,443はrailsの3000とかに飛ばす
* 実ドメイン=localhostの解決
* 既存の80,443はすでに使っている可能性があるため他のサービス停止など気にしたくない### 80,443は使っている可能性がある
これが実はちょっと面倒、hostsに実ド
RailsのJSONカラムをちゃんとバリデーションする
## 目的
RailsでJSONカラムを利用するとき、その大抵はRDSの正規化を正しくやろうとすると煩雑になりすぎるためにとった手段であることが多い(少なくとも私は)。
そういう場合対外においてJSONの形式は煩雑になるのでまともにバリデーションができていなかったり、ドキュメンテーションが難しかったりした。なので本番のJSONカラムに対してJSON Schemaを利用して「バリデーション」「ドキュメンテーション」の両方を実現していこうという話。
※ 基本的にRDSにおいてJSONカラムを利用するのは私は悪手だと考えています。その中でどうしても現状完全に正規化し切るのは難しいという前提でJSONカラムを選択せざるを得なかった時の対応だと思って読んでいただけるといいと思います。
## この記事のゴール
* RailsのJSONカラムに対してバリデーションが入っている
* JSONカラムに対してドキュメンテーションがされている(自動でドキュメントが更新される)
* 上記二つが連動することによって陳腐化しないドキュメンテーションになっている## JSON Schemaについて
今回
[Rails]アプリの雛形作成について
Rails アプリの雛形作成についてまとめます
## rails new コマンド
Railsで新規アプリケーションを作成する際に使用します。このコマンドを実行することで、Railsアプリケーションの雛形が作成されます。
“`ruby
# Railsアプリケーションを作成
% rails new アプリケーション名
“`
rails newコマンドで雛形を作成するときには、以下の2つの指定を行います。-使用するRailsのバージョンの指定
-オプションの指定### 使用するRailsのバージョンの指定
“`ruby
# Railsのバージョンを指定してアプリケーションを作成(6.0.0の場合)
% rails _6.0.0_ new アプリケーション名
“`
### オプションの指定
“`ruby
# オプションを付けてアプリケーションを作成
% rails _6.0.0_ new アプリケーション名 -オプション名
“`### -dディーオプション
作成するアプリが利用するデータベースの管理システムの種類を指定できます。
“`ruby
# デー
Satoruyaで敢えて採用しなかったライブラリ
2022年現在、SatoruyaというSNSをβテストという形で公開しています。
https://www.satoruya.com/
前に「枯れた技術の水平思考」で使うライブラリ(フレームワーク)を選定した、と記事にしました。
https://qiita.com/__satoruya/items/0a3721b5c70750d2f81f
今回はこのSatoruyaで使わなかったライブラリを紹介していきます。
# Railsを始めとするMVCフレームワーク
今回のSatoruyaの開発ではMVCフレームワークを使いませんでした。
Railsは・・・まぁ、嫌な言い方ですが、時代遅れという理由ですね。とっくに枯れた技術を通りこして悪い意味でレガシーになっています。
DjangoはPythonの豊富なライブラリが使えるというのもあり、まだまだ十分人気ですが日本語の資料が少なく、情けない話なのですが、英語のサイトを利用してまで使う必要があるのかと思って使いませんでした。
(Node.jsの方が日本語の資料は少ないだろと突っ込まれたら一切否定できませんが)
速度的にもNode.jsの方
3-13. 詳細ページを表示しよう
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回はツイートの詳細ページを作ります。
一覧ページに並んでいるツイートをクリックすると、そのツイートに関する詳細が見られるページというイメージです。
3-12. ツイートを投稿しよう – index
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# GOAL
– tweetした内容の一覧を表示する# ▼▼▼実装&解説動画
3-8. ツイートを投稿しよう – new
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回は投稿フォームを作ります。
※ 3-4の末尾にある、『復習問題』を終わらせている前提で進めています。
やっていないと途中でエラーが出てしまうので、必ずやっておきましょう。# 概要
管理者側ジャンル機能の作成の仕方
## ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。## ジャンルのモデル作成
“`
$ rails g model Genre
“`
のコマンドを打ち込み作成します。その後にマイグレーションファイルを開きカラムを追加。
“`db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1] def change create_table :genres do |t| t.string :name t.timestamps end end end ``` t.string :nameを追加してあげましょう。 nameは今回ジャンルに追加する名前の事です。 ``` $ rails db:migrate ``` 忘れずにrails db:migrateをしたら下準備は完了です。 ##
Carrierwaveとfog-awsを利用したS3へのアップロードが正常にできるまでに試したこと
# 概要
下記の記事を参考に、Carrierwaveとfog-awsを利用したS3へのアップロードができるように設定した。https://qiita.com/take18k_tech/items/2efd778c8dd9aae9496e#10-s3
本番環境へデプロイ後、動作を確認してみると、下記の状況となっていた。
– 画像をアップロードしても、
– S3バケットには何も表示されない
– /var/www/my-app/current/public/uploads配下に保存されている
– アクセスはできるが、CSSが反映されなくなっている# 環境
– アプリ
– ruby 3.0.2
– rails 6.1.4
– mysql 8.0.31– EC2AMI
– Amazon Linux2 AMI
– app server : Unicorn
– web server : Nginx# エラー①
/var/www/my-app/current/logをそれぞれ確認。
関係ありそうなのは下記のログ。
“`va
【Rails】DB接続のないログイン画面でバリデーションする
## はじめに
バリデーションは,ActiveRecordの機能として実装できますが,ActiveRecordはORMのフレームワークであるため,DB接続が必要になります.
そのため,DB接続しないモデルにはActiveRecordが使えません.
今回はActiveModelを用いて,DB接続しないモデルへバリデーションを実装する方法を整理しました.Rails初学者による記事になります.
不足,間違い等ありましたらご指摘いただけますと幸いです.## 環境
Ruby 3.0.4
Rails 6.1.7## やりたいこと
DBに接続しないsessionモデルで作成したログイン画面に,バリデーションを実装します.## 実装方針
1. sessionモデルに,`ActiveModel::Model`をミックスインすることで,バリデーション機能を有効にする.
1. sessionsコントローラで,`valid?`メソッドを用いて,バリデーションをトリガする.
1. sessionsビューのnewファイルで,エラーメッセージを出力する.## Modelでバリデーション機能を実装
【解決】EC2にてアセットファイルをコンパイルしたときにエラーが出た。
アセットファイルをコンパイルしたときにエラーが出ました。
手こずりましたが、いろいろ調べて解決することができたので、記録したいと思います。“`rails:ターミナル
$ rails assets:precompile RAILS_ENV=production
“`“`rails:ターミナル
yarn install v1.22.19
[1/5] Validating package.json…
error furima_38288@0.1.0: The engine “node” is incompatible with this module. Expected version “14.20.0”. Got “14.21.1”
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
“`上記のようにエラーが表示されました。
# エラーの原因
調べた結果、Node.jsの