投稿

9月, 2014の投稿を表示しています

WordPressで$_SESSIONが使えない

イメージ
ページ遷移のログを簡易的に$_SESSIONに保存して使いまわそうとしたら動作しなかったので調査。 環境: CentOS 6.5, nginx 1.6.2, php-fpm 5.4.33 initにフックしてsession_startしても、各ページでsession_idするたびに新たに新しいIDになって引き継げない。 function hoge_init() {     if (!session_id()) {         session_start();     } } add_action('init', 'hoge_init'); 調べてみるとPHPの設定でsession.cookie_pathの設定が「/tmp」になってた。 # less /etc/php.ini session.cookie_path = /tmp cookie_path はクッキーを保存するパス(URI)。一致したアクセスのみクッキーを使えるようになる。 cookie_pathを直したら動いた。 他のサーバーをみると「/」だったので、session.save_pathと勘違いして書き換えてたみたい。設定した覚えがないのでどっかのバージョンは/tmpに設定されるかも。 ちなみにsession.save_pathの設定は/etc/php-fpm.d/www.confに記載してある。     ちょっと深追いしてWordPressと_SESSIONの関係を調査。 WordPressはグローバル変数として_SESSIONを扱っていない。 Php session not working in wordpress page template - Stack Overflow Global Variables | WordPress Codex var_dump($GLOBALS); するとWordPressが生成したグローバル変数が出力される。   ということで$_SESSIONを使うのはやめて、 update_user_meta を使うことにした。   < Related P...

WordPressのWP_Cronを使って非同期処理

イメージ
WordPressに投稿するとアプリにプッシュ通知する仕組みを作っているときの覚書。 環境: CentOS 6.5, WordPress 4.0.0 Linuxのcronとか pthread に頼らずにやってみた。 WordPressにはwp_schedule_single_eventという登録したフックを一度だけ実行する関数がある。 Function Reference/wp schedule single event | WordPress Codex ソースをみると10分の間に同じリクエストがくると無視されるが、$argsが違えばスケジュールに登録される。 同じ記事に対して何度もプッシュ通知が来てもウザいのでちょうどいい。 コードサンプルは上の公式サイトを参考に。     でも念のためLinuxのCronに10分ごとに/wp-cron.phpにリクエストを送る処理書いた。。。 # vi /etc/cron.d/wordpress MAILTO="" # Excute WordPress WP_Cron */10 * * * * root curl http://hoge.com/wp-cron.php > /dev/null 2>&1 参考サイト: Better wp-cron using linux's crontab   < Related Posts > 【Titanium, Android】Notificationからアプリにデータを渡す TitaniumアプリでPush Notification【Android版】 Titaniumアプリでプッシュ通知(Push Notification)【iOS版】

【Titanium】ビルドしたときにzipalignエラー

イメージ
ネットで拾った古いソースコードを古いSDKでビルドしたときに下記エラーに遭遇した。 環境: Mac OS X 10.9.4, Titanium SDK 3.3.0.GA, Android SDK Tools 23.0.2 [ERROR] Unable to find Android SDK tools: zipalign. [ERROR] You have an incomplete or out-of-date installation. [ERROR] Verify your Android SDK packages or reinstall the Android SDK by running 'titanium setup android' or manually downloading from http://appcelerator.com/android-sdk. 下記サイトを参考にAndroid SDKにあるzipalignをコピーする Unable to find Android SDK tools: zipalign | Community Questions & Answers | Appcelerator Developer Center $ cd /Applications/android-sdk-macosx/ $ cp build-tools/19.1.0/zipalign tools/ これでビルドは通った。 元に戻すときは削除するだけ。 $ rm -rf tools/zipalign   < Related Posts > Titaniumを使ったアプリと苦労した事とかのまとめ2013å¹´ Titanium CLIでAndroid向けにCompile(Build)と実機でDebug

MariaDB(MySQL)設定のチューニング

イメージ
5年前にも書いた けど、調べ直したときの覚書。 環境: MariaDB 10.0.13   参考サイト Server System Variables - MariaDB Knowledge Base MySQL :: MySQL 5.5 Reference Manual :: 5.1.4 Server System Variables DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!   変数名 デフォルト 説明 max_connections 151 最大同時接続数。 Node.jsから非同期で処理する場合は一気に増加するので多めに設定。 thread_pool_size CPUの数 同時実行するスレッドグループの数。 デフォルトのままでいい。 参考: Thread pool in MariaDB 5.5 - MariaDB Knowledge Base thread_cache_size 0 キャッシュするスレッドの数。 "pool-of-threads"の場合無視される。 table_open_cache 400 全てのスレッドでオープンするテーブルの数。 多すぎても少なすぎてもダメらしい。 参考: Optimizing table_open_cache - MariaDB Knowledge Base 参考: MySQL :: MySQL 5.1 リファレンスマニュアル :: 6.4.8 MySQL でのテーブルのオープンとクローズの方法 key_buffer_size 134217728 MyISAMのインデックスをキャッシュするメモリ容量。全てのスレッドで共通。 実メモリの25%が妥当らしい。 参考: Optimizing key_buffer_size - MariaDB Knowledge Base sort_buffer_size 2M ソートするときにスレッドごとに使うメモリ容量。大きすぎるとメモリが足りなくなるので注意。 read_rnd_buffer_size 262144 ソート後にレコードを読み込むときに使用するメモリ容量。これもスレッドごと。 join_buffer_size 128KB インデック...

ロードバランサとしてHAProxyかNginxか

イメージ
ロードバランサにHAProxyとNginxで迷ったときの覚書。 ベンチマークはHAProxyの方が速いみたい。 architecture/elb-benchmark.wiki at master · eucalyptus/architecture | GitHub HAProxyは1.5からHTTPSもサポート。YUMのリポジトリにあるのは1.4が主流。 http, httpsをロードバランスするだけならNginxの方がいいかな? Nginxでロードバランサするときは下記記事が参考になりそう。 Nginx + WordPress ロードバランサー篇 | サーバーワークス エンジニアブログ   < 2014/09/23 Modified > Nginxの死活監視に不安があったけど、ちゃんと指定ポートに応答がなかったら別サーバーにリクエストを投げてくれた。   < Related Posts > Nginxを設定してWordPressにリバースプロキシする MariaDB, MySQLの冗長化、負荷分散の構成を考える

MariaDB Galera Clusterをインストールしてデータベースをクラスター化

イメージ
新サービスのサーバー構成を考えているときの覚書。 環境: CentOS 6.5 x86_64, MariaDB Galera Server 10.0.13 前の記事も参考に。 SE奮闘記: MariaDB, MySQLの冗長化, 負荷分散の構成を考える サービス全体のサーバー構成。 ロードバランサー02やWeb02がいればさらに安心できる。 ちなみにMariaDB Galera Clusterの最小ノード数は「3」。今回はデータベースをクラスター化するまで。   参考サイト MariaDB Galera Clusterを試す (1) | さくらインターネット研究所 Galera - MariaDB Knowledge Base CentOS 6.5 で MariaDB の Galera Replication Cluster を試す | CUBE SUGAR STORAGE   目次 YUM経由でインストール 起動と設定 2台目以降のノード設定 クラスターに参加   1.YUM経由でインストール 公式サイトを参考にYUMのリポジトリを追加する。 MariaDB - Setting up MariaDB Repositories [web01]# vi /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1   インストール実行 [web01] # yum search MariaDB [web01] # yum install MariaDB-Galera-server epelリポジトリを使ったので、 前の記事 を参考に登録した方がいいかも。 クラスター構成なので常に稼働する前提。メンテナンスで停止するときは手動で起動するため自動起動はしないようにしておく。 [web01] # chkconfig mysql off     2.起動と設定 公式...

Nginxを設定してWordPressにリバースプロキシする

イメージ
フロントエンドにNginxのサーバーを立てて、バックエンドのWordPressにリバースプロキシする設定しているときの覚書。 環境: CentOS 6.5, Nginx 1.2.6, WordPress 4.0 システム構成は下図。ポイントは外部と通信するときはHTTPSで暗号化して、内部ではHTTPでやりとりする。   参考サイト Nginx https reverse proxy to WordPress with Apache, http and different port | cmanios   以下「 https://hoge.com/demo/ 」アクセスしたときにweb01のWordPressを表示する設定。 SSLのバージョンに注意。 nginx - httpsだからというだけで安全?調べたら怖くなってきたSSLの話!? - Qiita lv01のnginx設定 server {     listen 80;     server_name hoge.com www.hoge.com;     return 301 https://hoge.com$request_uri; } server {     listen       443 ssl;     server_name  hoge.com;     root /home/httpd/httpdocs/;     #     # SSL     #     ssl on;     ssl_certificate      /etc/nginx/ssl.d/2014_hoge_cert.pem;     ssl_certificate_key  /etc/ng...

Nginxの設定(Config)変数の値を確認する方法

イメージ
Nginxでリバースプロキシして、バックエンドにあるWordPressを表示するように設定をゴニョゴニョしているときの覚書。 環境: Nginx 1.6.2 php-fpmとの連携を記述するときに「$document_root」の値を確認したい。 How to output variable in nginx log for debugging - Server Fault add_headerする方法が一番簡単。 # vi /etc/nginx/conf.d/01.wordpress.conf # # Demo # location /demo {     root  /home/httpd/hoge/web-demo;     try_files $uri $uri/ =404; add_header debug_nginx1 "$document_root"; add_header debug_nginx2 "$fastcgi_script_name"; } これでブラウザでアクセス。Google Chromeの開発ツールでは「Response Headers」に表示される。 その設定が反映されたか確認するのに便利。   < Related Posts > CentOS6 + nginx + PHP5.4 + MariaDB10 + WordPress + node.jsの環境を構築する手順をまとめ Nginx+PHP-FPMのTuning設定

【Titanium, Android】Notificationからアプリにデータを渡す

イメージ
新着プッシュ通知(Notification)をアプリ側に表示して、それを押したら新着記事を表示する方法を調査したときの覚書。 Androidで嵌った。 環境: Titanium SDK 3.3.0.GA プッシュ通知を受け取るまでは 前の記事 を参考に。   Notificationをタップして発行するIntentにpushExtraでセットした値が取れない。試したこと。 Windowの「focus」イベントで渡されたActivityを参照 Ti.Android.currentActivity.intent.getStringExtra(Ti.Android.EXTRA_TEXT) Windowの「focus」イベントで渡されたActivityを参照。引数のイベントオブジェクトから参照。 e.source.activity.intent.getStringExtra(Ti.Android.EXTRA_TEXT) 起動後にrequireされた別ファイルでゴニョゴニョしているときに参照。 Ti.Android.currentActivity.intent.getStringExtra(Ti.Android.EXTRA_TEXT) どれもダメ。   どうやらIntentが渡されるActivityを勘違いしているみたい。 そもそも今起動中のActivityは何? android - View the Task's activity stack - Stack Overflow このサイトを参考に今起動中のActivityを表示。 $ cd /Applications/android-sdk-macosx/platform-tools/ $ ./adb shell dumpsys activity | grep -i run   Running activities (most recent first):       Run #3: ActivityRecord{4216fae0 com.hoge.appdemo/org.appcelerator.titanium.TiActivity}       Run #2...

TitaniumアプリでPush Notification【Android版】

イメージ
前回 はiOSについて調査。今回はAndroid端末にプッシュ通知する方法を調査したときの覚書。 開発環境: Mac OS X 10.9.4, Titanium SDK 3.3.0.GA, Android 4.0.3 サーバー:CentOS 6.5   参考サイト Overview | Google Cloud Messaging | Android Developers Google Cloud Messaging for Android (GCM)を使ってみた - azukinohirokiの日記 Androidでのpush通知について | Don't Fall - Titanium Mobileユーザー会サポートBBS   目次 Google Cloud Messaging(GCM)を有効に GCMとの通信用モジュールを探す Titaniumモジュールをビルドする環境を整える Titaniumモジュールのビルド実行 アプリからモジュールを利用 サーバーからプッシュ通知テスト デバッグと検証してみた   1.Google Cloud Messaging(GCM)を有効に iOSは Apple Push Notification service(APNs) 経由でプッシュ通知を送る。Androidの場合は Google Cloud Messaging(GCM) 経由。 GCMのAPI Keyを取得 Google API Console にアクセス プロジェクトを作成。 プロジェクトの「Overview」を開くと左上に「Project Number」が表示されているのでこれをメモ。あとで「sender_id」としてアプリ側に記述する。 APIs & auth → APIsから「Google Cloud Messaging for Android」を有効に APIs & auth → Credentialsから「Server Key」を作成。   2.GCMとの通信用モジュールを探す iOSみたいにネイティブにサポートしてないので、公開されているモジュールを利用する。 liccowee/Google-Cloud-Messaging--Tit...

Titaniumモジュールをビルドする環境を整える

イメージ
このTitaniumモジュール をビルドする環境を作ったときの覚書。 環境: Mac OS X 10.9.4, Titanium SDK 3.3.0.GA   参考 Android Module Development Guide | Titanium 3.X - Appcelerator Docs GoogleCloudMessaging - Google-Cloud-Messaging--Titanium- モジュールを作る - Qiita   目次 Android NDKをインストール Android SDK 2.3.3 (API 10)をインストール ビルドツールApache Antをインストール   1.Android NDKをインストール TitaniumはNDK Revision 9をサポートしているらしい のでr9dをダウンロードする。 $ cd /Applications/ $ curl -O http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2 $ tar jxvf android-ndk-r9d-darwin-x86_64.tar.bz2 $ rm android-ndk-r9d-darwin-x86_64.tar.bz2 環境変数を定義 $ vi ~/.profile # Android NDK export ANDROID_NDK=/Applications/android-ndk-r9d 確認 $ source ~/.profile $ echo $ANDROID_NDK;   2.Android SDK 2.3.3 (API 10)をインストール 必須らしいので、android-sdk-macos/tools/androidを実行してインストール。 環境変数を定義してあるか確認。 vi ~/.profile # Android SDK export ANDROID_SDK=/Applications/android-sdk-macosx 確認 $ source ~/.profile $ echo $ANDROID_SDK; 環境が整ったか確認 $ ti...

Titaniumアプリでプッシュ通知(Push Notification)【iOS版】

イメージ
アプリ側にプッシュ通知しようと調査したときの覚書。まずはiOSから。 開発環境: Mac OS X 10.9.4, Titanium SDK 3.3.0.GA サーバー:CentOS 6.5, PHP 5.4.32   参考サイト Subscribing to push notifications - Titanium 3.X - Appcelerator Docs push通知について | Don't Fall - Titanium Mobileユーザー会サポートBBS Apple Push Notification Services in iOS 6 Tutorial: Part 1/2 | Ray Wenderlich   目次 APNsとの通信下準備。証明書署名要求(CSR)を作成 iOS Dev CenterでPush Notification可能なApp IDを作成 App IDと証明書署名要求を提出して証明書を取得 Linuxサーバーで使いやすいようにPEMフォーマットに変換 プッシュ通知を受け取るデバイス用にProvisioning Profile作成 アプリにプッシュ通知がきたときの動作を記述 サーバーから通知テスト   1.APNsとの通信下準備。証明書署名要求(CSR)を作成 iOSの場合は Apple Push Notification service(APNs) へプッシュ通知したい情報を送ると各端末に自動でプッシュしてくれる。 APNsから信頼してもらうために署名要求を提出して、署名(サイン)してもらった証明書を取得する必要がある。 まずはMac上で証明書署名要求(CSR)を作る。 Keychain Accessを起動 Keychan Access → Certificate Assistant → Request a Certificate From a Certificate Authority...を選択 「User Email Address」「Common Name」を入力して「Saved to disk」を選択してContinue. パスフレーズを入力 実際はLinuxサーバーからAPNsにアクセスするので、証明書署名要求(CSR)を...