- 1. 症状
- 2. 解決方法
- 3. 症状
- 4. 解決方法
- 5. 症状
- 5.1. postgresqlのbundle installができない(sh: /usr/bin/pg_config: No such file or directory)
- 5.2. Railsで複数レコードを更新する書き方メモ
- 5.3. 【Rails】form_withとは?
- 5.4. gem acts_as_list の使い方
- 5.5. Rails memberとcollectionの違い
- 5.6. 【Rails】ajax化とは
- 5.7. インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったこと
- 5.8. 【devise】暗号化前後のパスワードが一致しているか判定するメソッド
- 5.9. Mailgunのダッシュボードが開かない時(Railsチュートリアル学習)
- 5.10. deviceを使わないrequest specの基本的なテスト(Userモデルver.)
Ruby on Railsの環境構築【初心者用】
# 動機
シンプルに手順を示した記事が無かったため作成。
できる限りシンプルにまとめました!
とりあえず手元のPCでRailsを動かせるようになることを目的としていますので細かい説明は省略しています。
環境構築が終わってから、コマンドで具体的に何を行っているのか、一つずつ調べていきましょう。# 環境
macOS Monterey 12.1
# ひたすらインストールしていく
ターミナルを開いてコマンドを入力していってください。
### Command Line Toolsコマンドラインツール
“`
xcode-select –install
“`### Homebrew
macのパッケージ管理ツール
“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`### rbenv
Rubyのバージョン管理ツール
“`
brew update
brew install
【AWS】デプロイ後の修正を反映させる方法
#はじめに
「AWSでデプロイしたはいいけど、デザインを修正したくなったよー」という人に向けた記事です。#デプロイ後の修正を反映させるには
###masterにpushする
まずはローカル環境で修正したファイルをGitHubのmasterブランチにpushします。“`
$ git push origin master
“`###git cloneしたディレクトリにpullする
EC2インスタンスが開始されていることを確認してから、sshコマンドで接続します。“`
$ ssh -i 秘密鍵.pem ユーザー名@ipアドレス
“`デプロイ時にgit cloneしたディレクトリに移動してpullします。
“`
$ git pull origin master
“`###アセットをプリコンパイルする
修正がCSSなどの場合、アセットファイルをプリコンパイルする必要があります。
簡単にいうと、JavaScriptやCSSのアセットを通信量削減のためにギュッとまとめる仕組みです。
開発環境ではこの仕組みが自動で働いてましたが、
本番環境では行われないため手動
active_hashを使って都道府県モデルを作る方法
#はじめに
**今回は都道府県を選択する時に使う「active_hash」について新たに学んだので備忘録としてまとめます。**active_hash住所などを選択する時に都道府県を選択するプルダウンを作るために必要です。ユーザー登録をする時にはよく使いますが、47個の都道府県を毎回実装するのは大変です。そんな時に、active_hashを使うと簡単に効率よく実装する事ができます。#active_hashの実装方法
active_hashの実装方法は以下の手順です。1gemfile
2疑似モデルを作る
3対応するカラムを作る
4アソシエーションを定義する
です。
**今回はuserモデルに都道府県を保持させたい場合を想定します**それでは順番に説明していきます。
# gemfileの導入
まずはgemfileを導入します。“`
## Gemfileに以下を記述
gem ‘active_hash’
“`その後bundle installを忘れずします。
# 都道府県の擬似モデルを作る
次に都道府県を入れた擬似モデルを作ります
まずは実施のコードを
【CircleCI】bundle installされない場合の対処方法
railsでポートフォリオ作成時にCircleCIを導入したところ、
`bundle exec rails db:migrate`実行時にエラーが発生しました。
ログ上では`bundle install`してたが`bundle install`しろとのこと。。。ググっても解決策が見つからず、かなりハマってしまったので記録しておきます。
#エラー内容
![スクリーンショット 2022-01-11 14.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/fa92a9e5-30e2-7fc6-a557-12b83231c0c7.png)“`:エラーメッセージ
Could not find rake-13.0.6 in any of the sources
Run `bundle install` to install missing gems.
“`#解決策
>プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止
Ruby on Rails 日時データを年月日の形式で表示する
#日時データを年月日で表示したい
scheduleというテーブルの中から、startという日時データのカラムの値を表示したい時、
“`
<%= schedule.start %>
“`
↑こんな感じで書くと![スクリーンショット 2022-01-11 21.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/3882c94a-c11c-901d-f20d-bc0d54a3ebb2.png)
↑こんな感じで表示される。
これを、年月日だけで表示していきたい。#対処法
“`
<%= schedule.start&.strftime("%Y年 %m月 %d日") %>
“`
↑このように書くと、
![スクリーンショット 2022-01-11 21.56.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/ffa4b769-8cf1-736a-c061-18749bac
【Rails】ActionController::RoutingError (uninitialized constant HogeControllerの対処法
症状
railsで新たにアクションを追加したときに下記エラーメッセージが表示されました。
翻訳すると「初期化されていない定数hogeController」でした。“`terminal:error
ActionController::RoutingError (uninitialized constant HogeController
“`routeファイルとhoges_contollerファイルは以下です。
“`ruby:routes.rb
post ‘hoge’, to: ‘hoge#update’
“`“`ruby:hoges_contoller
class HogesController < ApplicationController end ```解決方法
routeファイルのhogeをhogesに変更することで解決しました。
“`ruby:route.rb
post ‘hoge’, to: ‘hoges#update’
“`下記の記事ではファイル名が間違っていたため同様のエラーが出ていたようです。
この
【Rails】dynamic constant assignmentの対処法【Ruby】
症状
railsで以下エラーが発生しました。
翻訳すると、「動的定数の割り当て」でした。“`terminal:error
SyntaxError (C:/app/controllers/api/v1/users_controller.rb:21: dynamic constant assignment
YOUR_DOMAIN = ‘http://localhost:3000’
^~~~~~~~~~~
“`“`ruby:users_controller.rb
def update
user = User.find_by(id: params[:userId])DOMAIN = ‘http://localhost:3000’
if(user.save!(user_params)
redirect_to DOMAIN + ‘?success=true’,
else
redirect_to DOMAIN + ‘?canceled=true’,
endend
“`解決方法
Appli
Ruby3.1.0のbundle installでpuma5.5.2がダウンロードできなかった時
# 環境
– macOS 12.1 (Monteray)
– ruby 3.1.0p0 (2021-12-25 revision fb4df44d16)[arm64-darwin21]
– Rails 7.0.1
– Apple clang version 13.0.0 (clang-1300.0.29.30)# 要約
“`
bundle config build.puma CC=”clang -fdeclspec”
“`でbundle installの実行時にオプションを渡して
“`
bundle install
“`を実行。
# 出ていたエラーメッセージなど
Rails7.0.1でrails newした後Gemを入れようとしてbundle installを実行するとこんな感じのエラーが発生しました。(一部省略)
“`
current directory:
/rails/rails7-try/vendor/bundle/ruby/3.1.0/gems/puma-5.5.2/ext/puma_http11
/.anyenv/envs/rbenv/ve
【Rails】同じscopeはmoduleに共通化しよう
複数のクラスに共通するscopeがあるとき、moduleとして共通化する。
##before
“`author.rb
class Author < ApplicationRecord scope :active, -> { where(state: ‘active’) }
end
“`“`book.rb
class Book < ApplicationRecord scope :active, -> { where(state: ‘active’) }
end
“`##after
“`models/concerns/active_scope.rb
module ActiveScope
extend ActiveSupport::Concernincluded do
scope :active, -> { where(state: ‘active’) }
end
end
“`“`author.rb
class Author < ApplicationRecord include ActiveScope end `
【Rails】routesのエラー「“’: No such file or directory 」の対処法
症状
railsで新たにアクションを追加しようと、routeファイルにルートを追加してサーバーを起動したところ下記のエラーが発生しました。
翻訳すると、「そのようなファイル、又はディレクトリはありません」でした“`ruby:error
rails s
=> Booting Puma
=> Rails 6.0.4.1 application starting in development
=> Run `rails server –help` for more startup options
Exiting
D:/app/config/routes.rb:28:in “’: No such file or directory – checkout (Errno::ENOENT)
from C:/appu/config/routes.rb:28:in `block (3 levels) in‘
from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/actionpack-6.0.4.
postgresqlのbundle installができない(sh: /usr/bin/pg_config: No such file or directory)
## **エラー内容**
新規プロジェクト作成時、
“`bash
rails new . –database=postgresql –skip-test
“`をした後、bundle installをしようとしたらできなかった?
“`bash
# エラー全文Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/apple/workspace/runteq/muscle_beat/vendor/bundle/ruby/3.0.0/gems/pg-1.2.3/ext
/Users/apple/.rbenv/versions/3.0.2/bin/ruby -I /Users/apple/.rbenv/versions/3.0.2/lib/ruby/3.0.0 -r
./siteconf20220111-87208-7szvjs.rb extconf.rb –with-pg-config\=/usr/bin/pg_confi
Railsで複数レコードを更新する書き方メモ
#はじめに
Railsで複数レコードを作成、更新する際にActiveRecord::Base.transactionをどのように用いるかを調べた際のメモです。
主に以下を参考にさせていただきました。
https://qiita.com/aba0312/items/8b29cafe6b505b6a7a4f#例
例えば、ユーザーのバルクインサートを行う際に全てのインサートが成功しなければロールバックするという想定をします。“`ruby:User.rb
class User < ApplicationRecord def self.bulk_create(users) all_valid = true transaction(join_table: false, requires_new: true) do users.each do |user| # 何らかの処理 all_valid &= user.save end
【Rails】form_withとは?
##form_withとは?
form_withは、htmlのformタグを生成するためのメソッド。
##どうなるの?
「生成する」というのは少し難しい表現ですが、「置き換わる」と考えても問題ありません。
つまり、form_withのところに、
gem acts_as_list の使い方
## acts_as_listとは
indexページなどで一覧表示しているデータの並び替えを簡単の実装できるgenのことです。このgemを利用することで各データごとに ”↑”、”↓” などのリンクを表示させクリックすることでそれぞれの並びを一つ上、一つ下と変更することが簡単になります。
## acts_as_list使い方
・Gemfileに以下を追加し、bundle install
“`ruby
gem ‘acts_as_list’
“`・”position”カラムの追加
acts_as_listで並び替えをする際の基準となるカラムは、”id”ではなく”position”というカラムです。これはもちろん元々モデルにあるものではないため、もしモデルを作成済みであれば新くmigrationファイルを作り、カラムを追加する必要があります。
・migrationファイルの作成
Taskモデルにカラムを追加したい場合以下のmigrationファイルを作成します。
“`ruby
class AddColumnPositionToTasks < ActiveRecord:
Rails memberとcollectionの違い
#結論
memberを用いることでidを用いて特定のリソースに対してアクションを実行することができ、collectionを用いることで全てのリソースに対してアクションを実行することができる。##公式API
**member**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-member
**collection**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-collection#member
“`ruby:routes.rb
resources :users do
member do
get :hoge
end
end
“`
memberを使うとルーティングは以下のようになります。
![スクリーンショット 2022-01-10 15.28.02.png](https://qi
【Rails】ajax化とは
##ajax化とは
Asynchronous JavaScript + XML の略で、非同期通信と呼ばれる通信方法のこと。
Webブラウザ上で非同期通信を行い、ページ全体の再読み込み無しにページを更新する。##同期通信、非同期通信とは?
**◆同期通信**
クライアントとサーバー間の通信においては、通常、同期通信と呼ばれる方法が用いられ、“一瞬画面が白く“なった後、画面が切り替わるような通信は、全てこの同期通信となる。ページが一瞬真っ白になってから表示されるまでの間は、“ユーザーは他の操作を何もする事が出来ない。“また、同期通信は“ページ全体を1から作成して表示させている“ので、どうしても表示までの“時間がかかる。“
[![Image from Gyazo](https://i.gyazo.com/d839480fa2bd646c00eadd4e729af8ab.png)](https://gyazo.com/d839480fa2bd646c00eadd4e729af8ab)
**◆非同期通信**
一方、非同期通信では、クライアントからのリクエスト送信後、
インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったこと
#目次
[1. インフラ設計](#1-インフラ設計)
[2. ネットワーク構築](#2-ネットワーク構築)
[3. サーバ・DB構築](#3-サーバdb構築)
[4. Lambdaによる自動化](#4-lambdaによる自動化)
[5. Amazon SES・SNS](#5-amazon-sessns)
[6. 開発環境構築(docker)](#6-開発環境構築docker)
[7. jenkins・phpmyadminなど開発ツール設定](#7-jenkinsphpmyadminなど開発ツール設定)
[8. VPN接続](#8-vpn接続)
[9. 起きた変化](#9-起きた変化)
[10. おまけ](#10-おまけ)# はじめに
インフラ素人同然レベルだった私が実務において、Webアプリケーションのインフラを0から構築することになりました。期間は約3週間、**インフラ設計から行い、構築したインフラ上でWebサービスが稼働できる状態**まで持っていくことがゴールになります。
約3週間の間、AWSやミドルウェア周りの技術に触れ、今まで考えてもみなかった知識の習得や、多くの
【devise】暗号化前後のパスワードが一致しているか判定するメソッド
## 実現したいこと
Railsでdevise gemを使っている環境にて、暗号化前のパスワードが暗号化後のパスワードと一致しているか確認したい。
例えば、以下のようなケースです。– 「このパスワードで設定したはずだがログインできず、パスワードがちゃんと設定されてるか確認してほしい」という問い合わせに対して調査する場合
– 有効期限を持たせた複数のパスワードを、過去履歴を含めてDBに保持しており、古いパスワードが入力された場合に「それは古いパスワードです」とアラートを出したい場合deviseでは、パスワードは暗号化されDBに保存されているため、DBのレコードを参照するだけだと、元のパスワードがどんなものだったかわかりません。
## 解決方法
「入力されたパスワードを自力で暗号化したものでDBを検索する」という方法もありますが、そこまでしなくても一発でわかる`valid_password?`メソッドがdeviseで用意されています。
レシーバにはActiveRecordインスタンス(パスワードが保存されたレコード)、引数に暗号化前のパスワードを指定します。## 基本例
“
Mailgunのダッシュボードが開かない時(Railsチュートリアル学習)
# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。Mailgunのダッシュボードが開かない(真っ白なページ)になる時の対処法の共有です。
## 背景
Railsチュートリアル学習の中で(11章)HerokuにMailgunというアドオンを入れるのですが、
`heroku addons:open mailgun`コマンド後にクロームで開こうとしてもうまくいきませんでした。![スクリーンショット 2021-12-31 083558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/8ffb4ada-41eb-788a-172b-0fc8470abf24.png)
(真っ白です…)# 結論
グーグルクロームではなく他のブラウザ(Edge)などで開くとうまくいきます!# おわりに
お読みいただきありがとうございました、しょぼい記事ですみません?
どなたかの参考になれば嬉しいです。
deviceを使わないrequest specの基本的なテスト(Userモデルver.)
# まずは超基本テスト
WebブラウザからWebサーバーへHTTPリクエストを送り、Webサーバーから正常なHTTPレスポンスが返ってくるとき、そのHTTPレスポンスのHTTPステータスコードは`200`を返します。
“`spec/requests/user_spec.rb
require ‘rails_helper’RSpec.describe “Sessions”, type: :request do
describe “GET users” do
let(:test_user) { create(:user) }before do
session_params = { user: { email: test_user.email, password: test_user.password } }
post “/login”, params: session_params #コメント①
get posts_path #コメント②
endit “つぶやき一覧ページのリクエストが成功していること”