ssh接続で制限してるgitアカウントに対して別アカウントからpushできるようにする
概要
gitアカウントに対して別アカウントからpushできるようにしたら便利だな〜と思い、
git push origin mainした時に Permissionエラーになった。
どうやらssh接続でcloneは誰でもできるがpushは特定のユーザーしかできないように過去の自分は設定していたようだ(偉い。。) 別gitアカウントのレポジトリにpushできるように調べた。
エラー内容
ERROR: Permission to [ユーザーID]/[レポジトリ名].git denied to [会社のgitのユーザーID]. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
対応
- 別アカウントhogeからアクセスできるように鍵を作成
$ ssh-keygen -t rsa -f id_rsa_hoge -b 4096 -C "" // 何も入力せずEnter or パスワードとなる文字列を入力
$ cd ~/.ssh/ $ vi config Host github_hoge <---- アクセスするときの名称 HostName github.com IdentityFile ~/.ssh/id_rsa_hoge <----自分の秘密鍵 User git
- 公開鍵の中身をコピー(mac)
$ pbcopy < ~/.ssh/id_rsa_hoge.pub
アクセスしたいレポジトリのユーザーの「setting」 → 「SSH and GPG keys」で公開鍵を追加 ※レポジトリのsettingではない!
テスト
$ ssh -T github_hoge $ Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
- リモートレポジトリでmainがあれば削除しておく
- ローカルにクローン
$ git clone git@github.com:hoge/sample_repository.git
- リモートの向き先でホスト名を変更。(~/.ssh/configで設定している場合)
$ cd レポジトリのディレクトリ
$ git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
// こんな感じになる
[remote "origin"]
url = github_hoge:hoge/sample_repository.git
- push
$ git push origin main
参考になりました、ありがとうございます。
https://tofusystem.work/programming-hack/easy-ssh-login-setting/
ssh接続されたgitアカウントに対して別アカウントからpushできるようにする
概要
ssh接続されたgitアカウントに対して別アカウントからpushできるようにする。
git push origin mainした時に Permissionエラーになった。
ssh接続で制限されている別gitアカウントのレポジトリにpushできるようにする。
エラー内容
ERROR: Permission to [ユーザーID]/[レポジトリ名].git denied to [会社のgitのユーザーID]. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
対応
- 別アカウントhogeからアクセスできるように鍵を作成
$ ssh-keygen -t rsa -f id_rsa_hoge -b 4096 -C "" // 何も入力せずEnter or パスワードとなる文字列を入力
$ cd ~/.ssh/ $ vi config Host github_hoge <---- アクセスするときの名称 HostName github.com IdentityFile ~/.ssh/id_rsa_hoge <----自分の秘密鍵 User git
- 公開鍵の中身をコピー(mac)
$ pbcopy < ~/.ssh/id_rsa_hoge.pub
アクセスしたいレポジトリのユーザーの「setting」 → 「SSH and GPG keys」で公開鍵を追加 ※レポジトリのsettingではない!
テスト
$ ssh -T github_hoge $ Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
- リモートレポジトリでmainがあれば削除しておく
- ローカルにクローン
$ git clone git@github.com:TOMOYUKI-n/ManagementTwitter.git
- リモートの向き先でホスト名を変更。(~/.ssh/configで設定している場合)
$ cd レポジトリのディレクトリ
$ git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
// こんな感じになる
[remote "origin"]
url = github_hoge:hoge/sample_repository.git
- push
$ git push origin main
(sanctum不使用)Laravel+VueでSession認証を作る時はKernel.phpの順番に注意
Laravel8 + Vue-cli でSPAを作成するにあたって、セッション認証の箇所でハマりました。 仕様上データベースは別サーバーなので、sanctumは使わずRedisを用いてsession認証を行います。 その際ページリロードでセッションが継続できない事態にハマってしまいました。
注意:ここでははまった箇所のメモ書き程度なので、本格的な SPAの作成手順はわかっているものとして記述しています。
状況
1、以下の処理を作成 ・ログインするとアクセストークンを作成、セッションとRedisに保存する。 ・その後リクエストが来ると、セッションから登録したキーを取得、Redisの内容と一致するかチェック ・OkならActionへ、NGなら認証エラーを返却
2、app/Http/Kernel.phpにapiでもセッションが利用できるように登録
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
3、ログインしてmiddlewareが適用されている適当なapiを作成して叩く 4、ページを更新して再度適当なapiを叩く ・・・ここでDebugで出しているセッションが出ずにnullになっていました。
結論、app/Http/Kanel.phpに記述するapiの箇所にて throttle:api よりも上に記述する必要があった。
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
取り急ぎ覚え書き。
docker起動時にPort でエラー
ふと触る時があったので。
docker-compose up -d
これでdockerを起動すると、、、
Cannot start service https-portal: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use
というエラーに遭遇。
以下、解決方法
今使っている portを確認
sudo lsof -i -P | grep ":80"
![]()
lsofでhttpdと出ている場合は Apatchのプロセスが既に起動している。
:80ポートを使用している複数のプロセス(105, 879)は、
すべてApache httpdの親プロセスが管理している子プロセスに当たる。
よって、親プロセスを停止させることで対応。
sudo apachectl stop
以上
【Ruby on Rails】undefined method `each' for nil:NilClassの原因と対応
環境:
Ruby 2.6.3
発生事象:
undefined method `each' for nil:NilClass

結論:
エラーが出たので探っていくと、コードの後ろに全角スペースがある。
恐怖の全角スペースエラー探しを、身をもって味わいました。
viewファイルがこちら:
コントローラー:
このindex の後ろに、全角スペースが隠れておりました。
過程:
エラーの意味は、undefined method `each' for nil:NilClass
→つまり「each」メソッドがないから、そんなものは実行できない、という意味です。
したがってここの @diaries が nil らしい。
次に@diariesというインスタンス変数は、コントローラで作成されている。
コントローラが怪しいが一見大丈夫。
スペルを何度もみても、間違えていない。
カーソルを合わせて一つ一つみていくと、、、
あれ、??スペース入っっとる。消してきれいにしよう。
と思い消すと、なんということでしょう!
輝かしいバグが消えました!(やったー!)
indexアクションはindex[全角スペース]で定義されてしまっていたので、
アクションで呼び出した時に、indexがないよ!となって、その結果htmlファイルを実行できない状態でした。(たぶん)
補足:
ちなみに @diaries = Diary.all の後ろだけに全角スペースが入った場合は、
こんな感じで別のエラーです。

undefined method `all ' for #<Class:0x00007fe88a13ae28> Did you mean? all
気をつけてください。
【備忘録】scaffoldで作成されたコントローラ処理
ここに記載されている。

show.html.erb
