バーチャルホストのアスタリスクの挙動
バーチャルホストの設定でアスタリスクを使う使わないで挙動が違うので、気をつける。
アスタリスクはすべてのアドレスにマッチしますので、主サーバは リクエストを扱いません。
www.example.com
は 最初にあるため、優先順位は一番高くなり、default もしくは primary のサーバと考えることができます。つまり、リクエストが どのServerName
ディレクティブにもマッチしない場合、 一番最初のVirtualHost
により扱われます。
バーチャルホストの例 - Apache HTTP サーバ バージョン 2.4
こんな設定にしました。
<virtualhost *:80> ServerName ec2.example.com ServerAlias ec2.example.com VirtualDocumentRoot /home/ec2/public_html CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/ec2/%Y%m%d.log 86400 540" combined ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/ec2/error_log.%Y%m%d 86400 540" ServerAdmin webmaster@ec2.example.com UserDir disabled </virtualhost>
postgis.sql:47: ERROR: could not load library postgis-2.0.so
こんなエラーが出てハマったのでメモ。
PostGISインストール時にエラー「postgis-2.0.so”をロードできませんでした」 » memo
PostgreSQL9.3系で起こるらしい。
無事にインストール出来ました。
バイナリデータからファイルの種類を取得する
Android4系でフォームからアップロードした画像ファイルがどうしても Content-Type でファイルの種類を取得できなかったので(application/octet-stream になってしまう)、
バイナリデータからファイルの種類を取得してみた。
http://www.gfd-dennou.org/member/morikawa/memo/binary_regexp_check.htm
plenvなperlでcgiを動かす
シバン(shebang)を以下のパスに書き換える
$ plenv which perl /Users/ユーザー名/.plenv/versions/5.16.3/bin/perl
PostgreSQL 8.1 の count(*) を高速化
PostgreSQL 8.1 で count(*) の取得が遅いので高速化してみた。
↓高速化対応前
ec_shop=> EXPLAIN ANALYZE SELECT count(*) FROM order WHERE is_settled = 't' AND delete_flag = 'f';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=146378.16..146378.17 rows=1 width=0) (actual time=3108.970..3108.971 rows=1 loops=1)
-> Seq Scan on order (cost=0.00..144762.80 rows=646145 width=0) (actual time=0.241..3091.596 rows=21089 loops=1)
Filter: (is_settled AND (NOT delete_flag))
Total runtime: 3109.115 ms
(4 rows)
↓高速化対応後
ec_shop=> EXPLAIN ANALYZE SELECT count(*) FROM order WHERE id > 0 AND is_settled = 't' AND delete_flag = 'f';
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=133584.15..133584.17 rows=1 width=0) (actual time=540.989..540.990 rows=1 loops=1)
-> Bitmap Heap Scan on order (cost=8744.16..133045.70 rows=215382 width=0) (actual time=311.333..524.769 rows=21089 loops=1)
Recheck Cond: (id > 0)
Filter: (is_settled AND (NOT delete_flag))
-> Bitmap Index Scan on order_idx_is_settled (cost=0.00..8744.16 rows=430763 width=0) (actual time=306.146..306.146 rows=21092 loops=1)
Index Cond: ((id > 0) AND (is_settled = true))
Total runtime: 541.263 ms
(7 rows)
INDEX を利用しているカラムを指定(上の例では id )する事で検索するレコード行数を制限した。
結果、検索する行数が減って結果の表示が速くなった。
↓参考
https://wiki.postgresql.org/wiki/Slow_Counting/ja
https://www.postgresql.jp/document/8.1/html/performance-tips.html
こういうのパズルみたいで楽しい。
リバースプロキシの効果
例えば、サーバを複数台で冗長化している場合、プライマリサーバとセカンダリ以下のサーバでファイルの同期が完了しておらず、若干の差が出る場合がある。
今回はMTで作業していたのだけれど、プレビューをする場合はプレビュー用のファイルを書き出された瞬間アクセスするので、セカンダリ以下のサーバに割り当てられた場合プレビューが出来ない場合がある。
そういう時にリバースプロキシを使うと良い。
ProxyPassMatch /(.*)mt-preview-(.+).html http://primary.www.example.com/$1mt-preview-$2.html
(今回はこんな感じで設定した)
こうすると、mt-preview-が付いたファイルにアクセスした時は必ずプライマリサーバを見る事になる。
homebrewにしたらsshfsができなくなった
すでにosxfuseが入っていて、その後homebrewを入れた。
そしたら今まで使っていたsshfsができなくなった。
[shiotaro@shiotakazuhiro-no-MacBook-Air] ~ % sshfs webservice@test.localhost.vm:/home/webservice ./Desktop/mount this OSXFUSE library version is incompatible with the OSXFUSE kernel extension
バージョンが変わってしまったらしく、OSXFUSEをアップデートしたら治りました。
もし同じ状況に遭遇したらアップデートすることで治るかもしれません。
▼参考
http://www.d-wood.com/blog/2014/02/10_5451.html
※こちらのページの「osxfuseをアンインストールする」をunistallではなくupdateを選択