Lets encrypt(certbot-auto)の更新コマンド備忘めも。
# certbot-auto certonly --webroot -w /usr/share/nginx/html/yama-lab.com -d yama-lab.com
# systemctl restart nginx
Lets encrypt(certbot-auto)の更新コマンド備忘めも。
# certbot-auto certonly --webroot -w /usr/share/nginx/html/yama-lab.com -d yama-lab.com
# systemctl restart nginx
bccomp() が undefindで、DialogFlowのPHP client libraryでエラー。
内部で bccomp()を使っている箇所があって、 php72-php-bcmathを入れないとだめみたい、後づけで入れる。
# yum install php72-php-bcmath
# cp /opt/remi/php72/root/usr/lib64/php/modules/bcmath.so /usr/lib64/php/modules/
# cp /etc/opt/remi/php72/php.d/20-bcmath.ini /etc/php.d/
# systemctl restart httpd
DockerのWordPressでmailcatcherにSMTP送信の設定
設定をメモ、Dockerはdocker-compose.ymlで以下のように定義
version: "3.5"
services:
wordpress:
image: wordpress:latest
ports:
- 80:80
links:
- wordpress-db
environment:
WORDPRESS_DB_HOST: wordpress-db:3306
WORDPRESS_DB_NAME: wp
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: pass
volumes:
- ./dist:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
wordpress-db:
image: mysql:5.7
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wp
MYSQL_USER: wp
MYSQL_PASSWORD: pass
volumes:
- ./db/mysql_init:/docker-entrypoint-initdb.d
- ./db/mysql_data:/var/lib/mysql
mailcatcher:
image: schickling/mailcatcher
ports:
- 1080:1080
- 1025:1025
SMTPは、WP Mail SMTP プラグインを利用してますその設定。
Laravel6 初期Auth関連メモ
$ php artisan migrate
$ composer require laravel/ui
$ php artisan ui vue --auth
$ npm install
$ npm run dev
'locale' => 'ja',
resources/views/auth/以下その他のviewを日本語へ
resources/lang/en をコピーして jaにして日本語に
$ php artisan make:notification RestPasswordNotificationJp
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class ResetPasswordNotificationJp extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct($token)
{
$this->token = $token;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('パスワード再設定のお知らせ')
->line('下のボタンをクリックしてパスワードを再設定してください。')
->action('パスワード再設定', url(config('app.url').route('password.reset', $this->token, false)))
->line('もし心当たりがない場合は、本メッセージは破棄してください。');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
public function sendPasswordResetNotification($token){
$this->notify(new ResetPasswordNotificationJp($token));
}
$ php artisan vendor:publish --tag=laravel-notifications
(resources/views/vendor/notifications/email.blade.phpを日本語にする)
@component('mail::message')
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# エラーが発生しました。
@else
# パスワード再設定のお知らせ
@endif
@endif
{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}
@endforeach
{{-- Action Button --}}
@isset($actionText)
<?php
switch ($level) {
case 'success':
case 'error':
$color = $level;
break;
default:
$color = 'primary';
}
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
@endisset
{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}
@endforeach
{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
{{ config('app.name') }}
@endif
{{-- Subcopy --}}
@isset($actionText)
@slot('subcopy')
{{ $actionText }}ボタンをクリックできない場合は、以下のURLへ直接アクセスしてください。
[{{ $actionUrl }}]({!! $actionUrl !!})
@endslot
@endisset
@endcomponent
vue router で忘れがちな設定
個人的メモ
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter); // <<ココ忘れがち
Laravelのルートがかなり多くなってきて、記述が大変&各ルートごとに細かな認可をどうするか考えた所、DBで管理することにしまあした。
モデルのイメージ
※アクションは頻繁に追加/変更差込などありそうなので、name(ルート名)で紐付けしている
権限をユーザーに付与する中間テーブル
(その他通常のフィールド)
こんかい業務案件なのでアクセス少なく気にならない不可でそのままですが、toC向けアクセス多い場合は何かしらキャッシュ/ビルドの仕組み必要そう。
$actions = \App\Action::get(); //全てのアクション取得
foreach ($actions as $key => $action) {
$methods = explode(',', $action->method);
$uri = $action->uri;
$name = $action->name;
$middleware = explode(',', $action->middleware);
$controllerAction = sprintf('%sController@%s', $action->controller, $action->action);
Route::match($methods, $uri, $controllerAction)->name($name)->middleware($middleware);
}
ざっくりと以下のように処理してます、のちのち運用フェーズではSQL一発で軽く確認できるような仕組みにしたい。
//actionを取得
$actionName = $request->route()->action['as'] ?? false;
//Actionモデルに認可判定処理関数を何かしら実装。
if(!Action::isAllow($actionName)){
//権限無いよのエラー処理
}
MacCatalinaにして、ブラウザが急にネットワークにつながらなくなったりする
GoogleChromeで新しいタブを開いたり、他のアプリを開いたりするとことごとくだめ。
ターミナル開いてどんなにコマンドを叩いても
fork: Resource temporarily unavailable
のエラーが出る。いろいろ調べると開けるファイルや、起動プロセス制限があるみたいでそれに引っかかっている可能性型高そう。
以下の記事を参考にlimit(ファイルとプロセス数)を上げてみる。
MacOSX で fork: Resource temporarily unavailable エラーになる場合の対処法
https://blog.regonn.tokyo/programmer/2017–02–03-mac-osx-process/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>4176</string>
<string>4176</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
一旦こちらで様子を見てみます。
MacBookProの外部ディスプレイの接続が途切れたり、認識しなかったりが多い。
MacBookProといつも4Kディスプレイを繋いでいるのですが、接続してもいつもつながらなかったり抜き差ししたり、差し込むポートを変更したりで消耗してました。(ほかにも接点復活剤でクレンジングしたりetc.)
今回ふと、ケーブルを疑って長いからなのかとか信号が弱いからなのかとか考えて違うケーブル買ってみることに、するとビンゴ次のケーブルに変えてから全く問題なくなりましたので困っている方にはオススメ。
本質的なケーブルの質なのか、接点の質なのかなぞですが、なんとなく短いほうが信号が強い感じがして1mのものを購入しました。もっと早く買っておけば案件でした。
LaravelでJsonでレスポンスする場合のリレーションを含める方法は、Model(Eloquent)のtoArray()をオーバーライド
前提知識
著者クラスがあったとして、booksのhasManyのリレーションと、年齢を返すageアクセサをtoJson()に含める例。
class Authoer extends Model{
public function books(){
return $this->hasMany(....)
}
public function getAgeAttribute(){
return ....
}
.............中略..................
public function toArray()
{
return array_merge(parent::toArray(), [
'books'=>$this->books,
'age'=>$this->age
]);
}
}
PhotoShopのテキストボックス内で色が違う場合のSVG書き出し方法。
タイトルの状態のテキストボックスをシェイプに変換すると色が一色になってしまう現象があったので、対処法。(なにかいい方法ないかなぁ。)
※1 複数の文字色を使っているテキストレイヤーをシェイプに変換すると、範囲の多い文字色にすべて変換されてしまうようでした。
Powered by WordPress & Theme by Anders Norén