ALBでHTTP→HTTPSに自動でリダイレクトさせるよ!

ALBでHTTP→HTTPSに自動でリダイレクトさせるよ!

EC2のALBを使ってリダイレクトさせます。

1:「EC2」で検索→「EC2」をクリックします。

2:ロードバランサーをクリックしてリスナータブからHTTPのルールの表示/編集をクリックします。

3: +ボタンをクリック

4:+ボタンをクリックしてパス…を選択(左)+ボタンをクリックしてリダイレクト先を選択します。

5:パスに*(アスタリスク)を入力して、リダイレクト先に443を入力します。

6:チェックマークをクリックして保存をクリックします。

http://ドメイン名でアクセスしてhttps://ドメイン名に自動でリダイレクトしてくれるのを確認できたらOKです。

 

Better Errorsの使い方(エラーが起きた時見るもの Docker環境下)

Better Errorsとは?

Railsの場合、better_errors gemを使うと便利で高機能なエラー画面が表示されます。

Better Errorsの導入方法

Gemfileに以下を記述します↓

group :development do
  gem 'better_errors'      ←追加
  gem 'binding_of_caller'  ←追加
end

docker-compose buildでコンテナをビルド

docker-compose build

/config/environments/development.rbに以下を追加します↓

if Rails.env.development?
  BetterErrors::Middleware.allow_ip! "0.0.0.0/0"
end

docker-compose up などでコンテナを起動すると↓

いつもならこのような表示が

このようになる!

左のペインで処理の流れがわかりやすくなる

右にある情報で、デバッグの手がかりを探す事もできます。

その他デバッグに関しての心得

  • 開発環境であれば画面にエラーの発生箇所が表示されます。
  • 本番環境であればログを読みます。ログにもエラーの発生箇所が表示されます。
  • エラー画面やログを見て、エラーが起きたファイルと行番号を確認します。

実際にエラーが起きたのは自分が書いたコードではなく、gemやフレームワークのコードであることも多いです。Railsのエラー画面であれば Full trace リンクをクリックすると、gemやフレームワークのスタックトレース(バックトレース)が表示されます。

スタックトレースは下から上にメソッドが呼び出された順番が表示されます。スタックトレースを読むことで、エラーが発生するまでにどのファイルのどの行が呼ばれてきたのかを確認できます。

ActiveRecord::NoDatabaseError – Unknown database ‘xxx’:(エラーメッセージ対処法)

Docker + Railsで開発中の時に遭遇しました。

ActiveRecord::NoDatabaseError – Unknown database ‘xxx’:とは?

docker-compose upでコンテナを起動した時に発生

データベースが作成されていないためのエラーなのでデータベースを作成します。

$ docker-compose exec web bundle exec rake db:create

Created database ‘***’と出ていればOKです。

この状態でアクセスすると

Migrations are pending. To resolve this issue, run:というエラーが発生します。

マイグレートすれば解決するので、マイグレートします。

$ docker-compose exec web bundle exec rake db:migrate

docker-compose upでコンテナを起動してエラーが出なくなっているのを確認しました。

Migrationを保留しているというエラーだったのでMigrationを実行するとエラーが出なくなります。

ポートフォリオの修正の仕方(AWS+Rails)

ポートフォリオで修正や追加する時に見る(自分用)

Nginxがおかしい時にするコマンド

curl -IXGET http://IPアドレス

正常の場合このように表示されます。

HTTP/1.1 200 OK
Server: nginx/1.20.0
Date: Sat, 19 Mar 2022 06:41:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
ETag: W/"919d450b157b488f0"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _todo_session=b2********R5Sy9mhX1RV1dWR01Hek1aR2JWcDNRPT0tLVdrNnp5dlhtaEFKRzBjUlhpMHhXbUE9PQ%3D%3D--cf3f8a4eaa2c6c53fc7b2f73f97a5cc2e9b7edcf; path=/; HttpOnly
X-Request-Id: 0de84a21-****-****-****-c4e2d
X-Runtime: 0.004671

nginxのエラーログを見るときは

sudo less /var/log/nginx/error.log

nginxの設定変更するには

sudo vi /etc/nginx/nginx.conf

cd /etc/nginx/conf.d/

sudo vim アプリ名.conf

sudo vi etc/nginx/conf.d/アプリ名.conf

#再起動して設定を反映するコマンド

sudo nginx -s reload

nginxのプロセスidを見るには

sudo lsof -i | grep nginx

アプリのエラーログを見るには

sudo less /var/www/アプリ名/log/nginx.error.log

EC2に接続したらアプリ直下に移動

cd /var/www/アプリ名/

nginxを再起動するには

sudo service nginx restart

pumaを停止するには

bundle exec pumactl stop

pumaを起動するには

bundle exec pumactl start

Pumaの設定変更するには

vim /var/www/アプリ名/config/puma.rb

②デプロイしてからJSやSCSSを直した後にすること

プリコンパイルするには

bundle exec rake assets:precompile RAILS_ENV=production

Pumaを再起動する

bundle exec pumactl stop

bundle exec pumactl start

Pumaを起動するコマンド/var/www/アプリ名/config/puma/productionに設定ファイルを書き込んでいる場合

bundle exec rails s -e production

AWS+Route53+お名前.com+LBでHTTP→HTTPSにするには?2021年4月版(1)

AWS×お名前.com×Route53で独自ドメインのサイトを作ったがHTTPSにしたい

まず、そもそもなぜSSL化をする必要があるのか?

・SSL化するとそのサイトのデータの通信が暗号化される

・Googleや国がSSL化を推奨している(SEO対策にもなる)

1:サービスからACMで検索してCertificate Managerを選びます。

2:証明書のリクエストをクリックします。

3:証明書のリクエストをクリックします

続きを読む

HerokuのDBの再構成方法・他Herokuエラー対処録

pgでやる場合

本番環境のDB変更の手順を忘れないように残しておきます。

※学習用ならいいのですが他の用途だとDBの再構築は非推奨です

① DBのリセット

heroku pg:reset DATABASE_URL

コマンドを実行すると
>
↑で画面が止まるのでアプリ名を入れます。

② マイグレーション(再構築)コマンド

heroku run rake db:migrate

③ Herokuの再起動コマンド

heroku restart --app APP_NAME

migrateした後に再起動しないとエラーが出る時があるらしいので下記を実行。[APP_NAME]をアプリ名に変える。

④ データseedsを投入するコマンド

heroku run rails db:seed

Failed to install gems via Bundlerと出たときの対処法

bundle lock --add-platform x86_64-linux

git add -A 

git commit -m "Gemfile.lockを修正" 

git push heroku main

You must use Bundler 2 or greater with this lockfile.と出たときの対処法

解決策

Gemfile.lockを削除します。

rm Gemfile.lock

アプリ本体にインストールされているgemも削除します。

rm -rf vendor/bundle

バージョン2以上のbundlerをインストール

gem install bundler -v '2.2.17'
bundle install

bundlerを旧バージョンに合わせる方法

gem install bundler -v 2.2.17 
rm -rf Gemfile.lock 
bundle _2.2.17_ install

GitHubに芝を生やす方法

GitHubに結構コミットしているのに全然反映されていない時

git config user.email

gitコマンドに紐づいているアドレスを確認しよう。

GitHubのSettingsから左のサイドバーのEmailsで

登録しているメールアドレスがわかるので

git config user.email メールアドレス

で変更して↓のコマンドで反映されているか確認

git config user.email

GitHubで芝が生えていたらOK

Docker+Railsで開発するときのメモ(自分用メモ)

忘れた時用にDockerを用いた開発のやり方の手順を記載します。

前提:Docker Desktopをインストールしている(OSはMac)
Rubymineで開発している。(VScodeでもできました)
Dドライブ内に作業フォルダ(アプリ名)などを置いている。

  1. Docker.appを起動する(Docker desktop)
  2. RubyMineを起動する(VScodeでもOK)
  3. cdでアプリの作業用フォルダへ移動 例:cd /Volumes/D/アプリ名
  4. docker-compose buildでコンテナを構築する
  5. Could not find rake-13.0.1 in any of the sources Run `bundle install` to install missing gems.というエラーが出た時は↓
  6. docker-compose stopをしてからdocker-compose downでコンテナを削除
  7. Gemfile.lockの記述をすべて削除してから
  8. docker-compose buildでコンテナをまた構築する
  9. docker-compose upでサーバー起動します。
  10. Unknown databaseと出てしまったときは以下のコマンドでデータベースを作成します。
  11. docker-compose exec web bundle exec rake db:create
  12. docker-compose exec web bundle exec rake db:migrate

以上です。

PaizaCランクLvアップ問題集(Ruby)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 数字の文字列操作(時刻2)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。与えられた時刻の 30 分後の時刻を同じ形式で出力してください。

1 行目に文字列 S が与えられます。
S は “XX:XX” という形をしており、 “:” の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。

入力例1
01:02
出力例1
01:32
入力例2
12:31
出力例2
13:01

解答  入力例1で解説

  1. 入力された時刻を受け取る(数値としてこのとき:は消える)
  2. hは1が入っている
  3. mには2が入っている
  4. mに30を加算する
  5. 条件分岐でmが60以上のとき、mに−60して、hを1増やす
  6. hとmを文字列に変換する
  7. hとmが一桁の時に”01″となるように’0’を追加する
  8. hとmの間に:をつけて出力する
s = gets.split(':').map(&:to_i)
h = s[0]
m = s[1]
m += 30
if m > 59
  m -= 60
  h += 1
end

h = h.to_s
m = m.to_s

h = '0' + h if h.size == 1
m = '0' + m if m.size == 1

puts h + ':' + m

問題  文字列(工事)

工事がN週間続く
各週日曜日の工事が始まる時刻と、
工事が何時間何分続くのかに関する情報が与えられるので、
工事が終わる時刻を00:00から23:59までの24時間表記で出力してください
工事がh時入力は以下のフォーマットで与えられます。

入力される値

N(工事が続く週の数を表す整数)
t_1 工事が始まる時間
h_1 工事が続く時間
m_1 工事が続く分
半角スペース区切りで与えられます。

t_iは24時間表記の時刻を表す文字列で、”AB:XY”という形をしており、これはAB時XY分を表す。
今回は00:00〜23:59までの24時間表記を採用し、時・分を表す数字が1桁の場合には十の位を0で埋めます。
入力値最終行の末尾に改行が1つ入ります。
t_N h_N m_N間m分続くとした場合、工事が始まった時刻のh時間m分後を指します)。

各週の工事が終わる時刻をN行出力してください。
時や分を表す数字が1桁の場合には十の位を0で埋めてください。たとえば24時は00:00、27時は03:00となります。

入力例2
2
15:59 0 1
23:20 1 0
出力例2
16:00
00:20

解答

  1. 入力Nを受け取る
  2. N回繰り返したいのでn.times
  3. 変数t, a_h, a_mにそれぞれ文字列を代入していく
  4. 変数h, mに時刻の部分の:で分割して数値を代入する。
  5. a_hとa_mを数値に変換して自己代入する
  6. mにa_m, hにa_hを加算する
  7. 条件分岐でmが60以上のとき、mに−60して、hを1増やす
  8. hが24以上のときhを−24する
  9. hとmを文字列に変換する
  10. hとmが一桁の時に”01″となるように’0’を追加する
  11. hとmの間に:をつけて出力する
n = gets.to_i

n.times do
  t, a_h, a_m = gets.split(' ')
  h, m = t.split(':').map(&:to_i)
  a_h = a_h.to_i
  a_m = a_m.to_i

  m += a_m
  h += a_h
  if m > 59
    m -= 60
    h += 1
  end
  h -= 24 if h > 23

  m = m.to_s
  h = h.to_s
  m = '0' + m if m.size == 1
  h = '0' + h if h.size == 1

  puts h + ':' + m
end

※ポイント

a, b, c = 長さ3の配列 のように書くと a, b, c に 長さ3の配列 の要素が先頭から順に代入される

たとえばa, b, c= [1, 2, 3]と書くと a に 1 が、b に 2 が、c に 3 がそれぞれ代入される。

配列の長さと同じ数の変数を左辺に用意する必要があります。

日付を跨ぐ場合、h > 23 のときh -= 24を実行する

h の長さが 1 であるとき、h の先頭に 0 を付ける
m の長さが 1 であるとき、m の先頭に 0 を付ける

先に分の方の計算を先にすること!

m > 59 の操作で h > 23 になる可能性があるため。

Docker(新規コントローラーの作成とコントローラーの削除)

Dockerでのコントローラ作成方法(コントローラは複数形で)

docker-compose exec web rails g controller tasks create destroy

ビューファイルを生成したくない時(–skip-template-engine: ビューファイルをスキップする設定)

docker-compose exec web rails g controller macs create destroy --skip-template-engine

コントローラーを削除したいとき

docker-compose exec web rails destroy controller tasks