AWS EC2 + Railsで急に502エラーが発生した

何もしていないけど、急に502のエラー画面が出現してlogを漁ってみたところ

(13: Permission denied)

が表示されました、。。。

どうやら自分の場合はunicornのsocketにうまく接続できていないみたいで、プロセスをkillして

sudo chmod 777 /var/www

からの再デプロイ、で解決できました!

参考記事

【ALB unicorn nginx】急に502 Bad Gatewayが出て直らないとき

AWS EC2 LinuxでNeovimを導入する方法

普段Neovimで開発しており、最低限のvim操作を行うために導入しました

まずはyumで関連のライブラリとかをinstall

sudo yum groups install -y Development\ tools
sudo yum install -y cmake
sudo yum install -y python34-{devel,pip}
sudo pip-3.4 install neovim --upgrade
(
cd "$(mktemp -d)"
git clone https://github.com/neovim/neovim.git
cd neovim
make CMAKE_BUILD_TYPE=Release
sudo make install
)

上記完了したら、ターミナルでこちらを打ち込んでください

/usr/local/bin/nvim

nvimをinstallしただけでは、毎回上記のようにpath指定しないと起動しないので
エイリアスを下記のように追加しておきます

vim .bash_profile

alias vi='/bin/nvim'
alias vim='/bin/nvim'

これでvimコマンドでneovimが発火するようになりました!

参考記事

kawaz/install_neovim_to_amazonlinux.sh

CentOS8 に neovim をインストールする

AWS + Rails + Capistranoで何もエラーないのに表示されない問題

タイトルの通りで、

  • Rails
  • AWS EC2
  • capistrano

で自動デプロイを実現し、Elastic IPで固定したIPにアクセスしているにもかかわらず、全く何も表示されない
という謎現象が発生しました。。。。

で、リンクを確認してcurlしようとしたら、リンクが!!!!

curl -IXGET https://xx.xxx.xxx.xx/

httpではなくhttpsになってました!!!!!

どうやらenvironment系のところで

# condig/environments/production.rb
  config.force_ssl = true

SSL強制化されてるみたいで、URLをコピるとなぜかhttpsにリダイレクトされてました

なので、上記をfalseに変更し、デプロイしてみました

こちらが、SSL強制化されてた時のcurl

$ (x86_64)curl -IXGET http://xx.xxx.xxx.xx/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.20.0
Date: Thu, 13 Jan 2022 16:19:41 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
Location: https://xx.xxx.xxx.xx/

こちらがSSL強制化せずにhttp許容した時のcurl

status 200で帰ってきています!!!

$ (x86_64)curl -IXGET http://xx.xxx.xxx.xx/
HTTP/1.1 200 OK
Server: nginx/1.20.0
Date: Thu, 13 Jan 2022 16:35:23 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 44617
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
Link: </packs/css/application-b171b713.css>; rel=preload; as=style; nopush,</packs/js/application-7afb58b9a494bcaea598.js>; rel=preload; as=script; nopush
Vary: Accept
ETag: W/"6fa88ded29571f01eeb7abda0a4163d6"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _driver_app_session=TveHf8x1%2BTOIoa99u9JSKQwfW0t%2FcMGAXfoiQnVSnvSc5hYdsazCzMpGAP35yNq7TetZsRYS8JJ24WiLzQ1tCzmcSC5fldSHA%2BqA8Upp1o%2FaOO51WmU9rcwBV3lKhdzIHM%2Fxq0aYYGX8Jk9QlZ1Sc3TGcYyHwCLrPG5nzmk0aXM5d785RHnLW9nh8W9MI2NXbrkDl1%2FIOkjU3jUTlidW6mEs3ngEN10cd6majXuzIackgOXcJ4BimYy7PkSAtWsmr%2FRu1hqSahpS%2BOtD6K72sRgyouyD3YhqewYc--RUwMmoZJgeSmRZ8b--6ijMtvVGaI8HGUBqLZPoTw%3D%3D; path=/; HttpOnly; SameSite=Lax
X-Request-Id: 8939aab1-4a98-4060-8669-053a804fca84
X-Runtime: 0.261474

200で返ってきたことを確認したら、ブラウザで

http://xx.xxx.xxx.xx/

にアクセスするとRailsアプリが表示されています!!!!!!!

httpsではなく、httpなのでここは必ず確認したください!!!!

もしうまく動かなければ、unicornのプロセスを削除した上で再度デプロイなどしてみると動くこともあるかもです!!!!!

参考記事

EC2にデプロイするも、エラーログに何も表示されない時の可能性

AWS + Rails + Capistrano でGemfile not found (Bundler::GemfileNotFound)出る

Capistranoでデプロイできているようですが、サーバー起動せずlog見たらタイトルのエラー出てました

調べてみるとどうやら、Gemfileの参照がうまくいっていないようなので、下記の設定を追加することで参照先を固定して問題を解決しました!

# config/unicorn.rb
before_exec do |server|
  ENV['BUNDLE_GEMFILE'] = @app_path + "/current/Gemfile"
end

AWS EC2で古いnodeがinstallされる問題の解消

AWSのEC2でver 14のnode入れているはずなのに、6系が毎度installされる問題が発生しました

下記の通り実行することで解消できました!

sudo yum remove -y nodesource-release* nodejs
yum clean all
sudo rm -rf /var/cache/yum/*
sudo rm /etc/yum.repos.d/nodesource-el.repo

curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
sudo yum install -y nodejs

参考記事

Amazon Linuxで古いNode.jsがインストールされる時の解決方法

sudo yum -y install mysql56-server mysql56-devel mysql56 No package mysql56-server available

AWSのEC2でMySQLを構築しようとしたところ、タイトルのエラーが発生しました

どうやら、

こちらのコマンドに変更して実行したところ、問題なくinstallできました🙌

sudo yum -y install mariadb-server mariadb-devel mariadb
sudo service mariadb start
sudo service mariadb status

# ここから先は起動方法と初期password生成方法
sudo systemctl start mariadb
sudo systemctl status mariadb
sudo /usr/bin/mysql_secure_installation
mysql -u root -p

参考記事

Yum: No package mysql-server available in Cent OS 7

Access denied for user ‘root’@’localhost’ (using password: NO)

railsでmysqlを動かしていたところ、タイトルのエラーが発生

下記の記事を参考に直せました🙏

注意点:

権限を回避してアクセス

という箇所ありますが、command + tで新しターミナルウインドウ開く、というのが重要っぽいので、気をつけてください!

MySQLインストール後、アクセス拒否 (Access denied for user ‘root’@’localhost’)

Please reinstall Cypress by running: cypress install

cypressを起動しようとしたところタイトルのエラーが発生しました

No version of Cypress is installed in: /Users/masahirookubo/Library/Caches/Cypress/8.7.0/Cypress.app

Please reinstall Cypress by running: cypress install

----------

Cypress executable not found at: /Users/masahirookubo/Library/Caches/Cypress/8.7.0/Cypress.app/Contents/MacOS/Cypress

----------

Platform: darwin (20.6.0)
Cypress Version: 8.7.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

yarnでcypressを強制installすることで対応しました🙌

yarn run cypress install --force

参考記事

Cypress failed to start on Windows

TypeScriptで`TS1192: Module ‘”./node_modules/@types/react/index”‘ has no default export.

RailsにReact + TypeScript入れたタイトルのエラー発生

こちらで治りました🙏

{
   "compilerOptions": {
     "declaration": false,
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
     "lib": ["es6", "dom"],
     "module": "es6",
     "moduleResolution": "node",
     "sourceMap": true,
     "target": "es5",
     "jsx": "react",
     "allowSyntheticDefaultImports": true, // 追加
     "esModuleInterop": true               // 追加
   },
   "exclude": [
     "**/*.spec.ts",
     "node_modules",
     "vendor",
     "public"
   ],
   "compileOnSave": false,
}

参考記事

TypeScriptでTS1192: Module '"./node_modules/@types/react/index"' has no default export.というエラーが出る

pytestのメモ

pytestに関する個人的メモです🙏

@pytest.mark.parametrizeについて

一つのテストで複数の値を検証することができる

参考記事: pytestのparametrizeの使い方とその有用性について

@pytest.fixtureについて

テスト実行時にデコレータで設定した関数が実行され、その返却値をテストで参照できる、というものです

参考記事: [Python] 初中級者のためのpytest入門

from unittest.mock import patchについて

指定した関数(それ以外も行けるかも?未調査)に値をぶちこめる

こちらの画像が例

use caseなどに任意の値を入れてテストすることが可能なので、pytest.fixtureよりも個人的には大きな発見

参考記事: pytest ヘビー🐍ユーザーへの第一歩

def test_hoge(client)のclientについて

clientのfixture設定していないのに何故か使えてしまう???という問題発生していて、
これはpytest-flaskのpip入れているから、らしいです

ちなみに、それ以外にも提供されているfixtureあるので参照してみてください

参考記事: https://pytest-flask.readthedocs.io/en/latest/features.html#fixtures