Laravel で .env の内容が反映されない場合

公式マニュアルにも記載があるが、
Laravel アプリで artisan config:cache を行っていると .env を変更してもファイルの内容が反映されない
また、アプリ内で env ヘルパー関数などから直接環境変数を参照しているとそもそも値が渡っていない
下記実装を見ると分かるが、 config キャッシュ済みの場合はそもそも .env のロード自体がスキップされるため

framework/LoadEnvironmentVariables.php#L20 at bd352a0d2ca93775fce8ef02365b03fc4fb8cbb0 · laravel/framework

解決するには config を cache しない、又は env の値を config ファイルを経由して参照するよう徹底し値の変更ごとに cache し直す

vultr で ubuntu インストールして最初に行った設定

SSD VPS Servers, Cloud Servers and Cloud Hosting by Vultr - Vultr.com というサービスで ubuntu をインストールした時の記録

2.5ドルのは空きがなかったので5ドルのプランにした
とはいえ東京でメモリ1GBのマシンがこの値段なら十分安い
ちなみにこのリンクから登録してもらうとお互いにクレジットがもらえる(ある程度実際に課金する必要はある)

インストールしたのは ubuntu 16.04
web管理画面から作成を実行し、しばらくしてRUNNINGのステータスになるとアクセス可能になる
IPアドレスと root のパスワードも管理画面で確認可能

アカウント作成

最初は root しかいないので作業用アカウントを作成し sudo 出来るグループに追加しておく

adduser yusuke
passwd yusuke
gpasswd -a yusuke admin

作成したら ssh-copy-id などで公開鍵認証でのログインが出来るようにしておく
必ず鍵認証でアクセスが可能なことを確認しておくこと

root, パスワードでのログイン禁止設定

sudo vim /etc/ssh/sshd_config して PermitRootLogin, PasswordAuthentication を no にする
sudo service sshd restart する
この時点でパスワードログイン出来ないことを確認しておくこと

ファイアウォール設定

ubuntu では iptables を直接触らずに ufw というコマンドで設定していく
以下では ssh, http, https のみ許可している
参考:ufwを使って簡単にファイアウォールを設定する - Qiita

sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw reload

aptitude のインストール

組み込みの apt-get でも十分だが、 aptitude の方が多少便利
具体的には関連パッケージの自動アンインストールをデフォルトでやってくれたりする
(autoremove を付ければ apt-get でも出来る)

sudo apt-get install aptitude

ついでに upgrade して再起動しておく

sudo aptitude upgrade
sudo reboot

怪しいログイン試行をブロック

denyhosts というサービスをインストールするとログインに失敗したホストを自動的に /etc/hosts.deny に追加してくれる
sudo aptitude install denyhosts
設定はDenyhosts導入メモ - まめ畑などを参考に
sudo service denyhosts restart で設定反映

タイムゾーンをJSTにする

デフォルトはUTCなので日本時間に変更する

sudo timedatectl set-timezone Asia/Tokyo

時刻同期の設定もしておく

sudo aptitude install ntp
sudo vim /etc/ntp.conf

末尾の方にある server に適当な国内 ntp サーバを設定する
server ntp.nict.jp など
sudo service ntp restart で反映

Laravel の Input 値が空文字列だったら null に変換する機能を無効にする

Model のフィールドに空文字列を渡しているつもりが mysql 側から NonNull なカラムに Null が渡されたとエラーが返ってきてこの機能の存在に気づいた
middleware は非常に便利だが、自分が実装・追加したわけではない処理に関してはこのような暗黙的な副作用があったりして中々厳しい

HTTP Requests - Laravel - The PHP Framework For Web Artisans
ドキュメントにも書かれており、どうやら 5.4 からこの挙動がデフォルトになったようだ
無効にするには App\Http\Kernel クラスにある ConvertEmptyStringsToNull middleware をコメントアウトすれば良い

無料で使える画像リサイズAPI

Android アプリで使うために指定した url の画像をリサイズして返してくれるAPIを探したところ、2つ見つけることが出来た
しかもどちらも無料で利用でき、 https にも対応している
登録も API key の取得も要らず、画像の url を書き換えるだけで今すぐ利用出来る

続きを読む

tmux 2.4 で vi 風キーバインドが invalid or unknown command と言われる

起動時に

invalid or unknown command: bind-key -t vi-copy v begin-selection

などと言われる
どうやら設定の書き方が変わってしまったようだ

invalid or unknown command: `bind-key -t vi-copy ....` · Issue #754 · tmux/tmux

ここの下の方に書かれているが、こんな感じにすると直った

unbind-key -T copy-mode-vi Space     ;   bind-key -T copy-mode-vi v send-keys -X begin-selection
unbind-key -T copy-mode-vi Enter     ;   bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
unbind-key -T copy-mode-vi C-v       ;   bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
unbind-key -T copy-mode-vi [         ;   bind-key -T copy-mode-vi [ send-keys -X begin-selection
unbind-key -T copy-mode-vi ]         ;   bind-key -T copy-mode-vi ] send-keys -X copy-selection