AWSのt2でmysqlが重い

AWSのt2でMySQLを動かし、大きめのテーブルを操作したところ
やけに反応が遅くてTOPを見るとどうもmysqlがメモリを使いまくっている状態
mysqlを止めて再起動すると
スタートに失敗して
mysqld dead but subsys lockedとの表示
freeで確認するとswapが内容なのでswapを作成することで解決

#dd if=/dev/zero of=/swapfile bs=1M count=1024
#mkswap /swapfile
#swapon /swapfile

vagrant+chefでcentos6.5+php5.5

秘伝のタレ状態で昔作ったVagrant環境を使いまわしていましたが
vagrantやVirtualBoxのバージョンを上げた所動かなくなったので
あらたに作り直しました。

Mac OSXへの環境構築を行います。

Vagrant
http://www.vagrantup.com/downloads.html
VirtualBox
https://www.virtualbox.org/wiki/Downloads
chef
http://www.getchef.com/downloads/chef-dk/
それぞれdmgでインストールしてください
knife soloを利用したいので

$chef gem install knife-solo

仮想環境にchefの設定を行うプラグインvagrant-omnibusも準備します。
$vagrant plugin install vagrant-omnibus

knife solo を使って初期化します。

$knife solo init centosphp(プロジェクト名等)
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...

引き続きphp等のレシピを作成します。

$cd centosphp
$knife cookbook create localedef -o site-cookbooks/
$knife cookbook create apache -o site-cookbooks/
$knife cookbook create php -o site-cookbooks/

それぞれ下記ファイルを修正します。
CentOSの日本語化
/site-cookbooks/localedef/recipes/default.rb

bash 'localedef' do
  code 'sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8'
end

Apacheの設定
ドメインでアクセスさせるためにヴァーチャルホストを設定します。
/site-cookbooks/apache/recipes/default.rb

%w[httpd httpd-devel mod_ssl
].each do |pkg|
  package "#{pkg}" do
    action :install
  end
end

service 'httpd' do
  supports :status => true, :restart => true, :reload => true
  action [ :enable, :start ]
end

template "/etc/httpd/conf/httpd.conf" do
  source "httpd-2.2.conf.erb"
end

template "/etc/httpd/conf.d/php.vm.conf" do
  source "php.vm.conf.erb"
end

/site-cookbooks/apache/templates/default/httpd-2.2.conf.erb
設定ファイル一回仮想環境で作成したもの等をコピーして
NameVirtualHost *:80
の部分のコメントを外しました。

php.vmというドメインでアクセスさせます。
ドキュメントルートは後で設定するVagrantfileの中のsyncfolderとの関連で
適時修正してください。
ここでは仮想サーバの/var/www/src/php/public
をドキュメントルートとします。

/site-cookbooks/apache/templates/default/php.vm.conf.erb

<VirtualHost *:80>
    ServerName php.vm
    DocumentRoot /var/www/src/php/public

    <Directory /var/www/src/php/public>
        Options All
        AllowOverride All
        Order allow,deny
        Allow from all
   </Directory>
</VirtualHost>

remiからPHPをインストールしたいのでrepoの登録を行ってからPHPのインストールをします。
/site-cookbooks/php/recipes/default.rb

#epel
remote_file "/tmp/#{node['epel']['file_name']}" do
  source "#{node['epel']['remote_uri']}"
  not_if { ::File.exists?("/tmp/#{node['epel']['file_name']}") }
end

package node['epel']['file_name'] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node['epel']['file_name']}"
end

#remi
remote_file "/tmp/#{node['remi']['file_name']}" do
  source "#{node['remi']['remote_uri']}"
  not_if { ::File.exists?("/tmp/#{node['remi']['file_name']}") }
end

package node['remi']['file_name'] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node['remi']['file_name']}"
end

%w[ php php-pdo php-mbstring php-mysqlnd].each do |pkg|
  package "#{pkg}" do
    action :install
    options "--enablerepo=remi,epel,remi-php55"
  end
end

attributeにremiとepelのrpmのダウンロード先を指定します。
/site-cookbooks/php/attributes/default.rb

default['remi']['file_name']  = "remi-release-6.rpm"
default['remi']['remote_uri'] = "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"
default['epel']['file_name']  = "epel-release-6-8.noarch.rpm"
default['epel']['remote_uri'] = "http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm"

Vagrantfileの修正

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.network "private_network", ip: "192.168.33.104"

  config.vm.synced_folder "./src", "/var/www/src", :create => true, :owner => 'vagrant', :group => 'vagrant', :mount_options => ['dmode=777', 'fmode=775']

  config.omnibus.chef_version = :latest

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "./site-cookbooks"
    chef.add_recipe "localedef"
    chef.add_recipe "apache"
    chef.add_recipe "php"
  end
end

php.vmでアクセスできるようにhostsの設定

$ sudo vi /etc/hosts

Vagrantfileで指定したIPを記述します

192.168.33.104 php.vm

後から手順を拾ったので、そのままで動かなかったらすいません

利用バーション
VirtualBox 4.2.36
Vagrant 1.7.2
Chef: 12.3.0

参考にしたページ
http://www.d-wood.com/blog/2014/09/29_6938.html
http://shusatoo.net/infra/chef/vagrant-chef-solo-php-mysql-development-environment/
http://dqn.sakusakutto.jp/2014/05/mac_osx_linux_chef_knife_berkshelf.html
その他
ありがとうございました。

knife solo initでCannot find sub command for: ‘solo init chef’

MacのOSXでknife soloを使おうとしたところ

$ knife solo init chef
FATAL: Cannot find sub command for: 'solo init chef'
Available subcommands: (for details, knife SUB-COMMAND --help)

** BOOTSTRAP COMMANDS **
knife bootstrap FQDN (options)
knife bootstrap windows ssh FQDN (options)
knife bootstrap windows winrm FQDN (options)

メッセージが続く

Cannot find sub command for: ‘solo init chef’
となってしまった。

$witch knife
/usr/bin/knife

となっていたのでインストールはされていたようだ

入れなおそうと

$brew list
$gem list

とかして探してみるがみつからず
2つchefを入れているとかそういう状態では無いようでした。

$ ls -la /usr/bin/knife*
lrwxr-xr-x  1 * *  21  5 13 20:07 /usr/bin/knife -> /opt/chefdk/bin/knife

chefdkでインストールしていたようだ

そこで「chefdk knife solo」と検索をしてみるとDQNEOさんのページがHITした
http://dqn.sakusakutto.jp/2014/05/mac_osx_linux_chef_knife_berkshelf.html

ChefDKにはknife soloが含まれていません。

なんと、、
記事にあるとおり

$chef gem install knife-solo

とするとChefDK内にknife-soloをインストールしてくれらしいです。

$ knife solo init chef
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...

ばっちり!

Multilingual front page

多言語化させた場合にTOPページの一覧に不達の言語の同一記事が出てしまいます。その場合の対応です。

色々と設定していたのですがdrupalgardensに答えはありました。

http://www.drupalgardens.com/documentation/language/multiple/interface/front-page

サイト構築>VIewsを選択します。
グレーダウンしていますが、右側のセレクタから編集を選んでください。

 

現在の設定では翻訳言語も出てしまいますのでFILTER CRITERIAを設定します。フィルターはコンテンツ: 言語(Content: Language)を選択します

次の画面では図のようにis One of Current user’s languageを選択し

Apply(all displays)を押下してください。

このままだとドキュメントルートでアクセスした場合に言語が指定されないので

表示する言語を指定したい場合は

環境設定>システム>フロントページより対象の言語を指定するURLを設定してください。

(URLのハンドリングによっては設定が違う場合もあるかもしれません)

これでフロントページにアクセスすると、言語でフィルターのかかったページが表示されます。

 

 

 

Notice: has_cap の使用はバージョン 2.0 から非推奨になりました ! プラグインやテーマでのユーザーレベルの使用は推奨されていません。代わりに権限グループと権限を使ってください。 in wp-includes/functions.php on line 3318

WordPressのプラグインを有効にした場合に標題のエラーが出た場合。管理画面に何も表示されないという時は疑ってください。(メッセージはwp-config.phpでdebug=trueにしないと表示されませんが)

ちなみに私は久しぶりにプラグイン作るのにcodexからコピーして作ろうとして発生しましたがw

「Notice: has_cap の使用はバージョン 2.0 から非推奨になりました ! プラグインやテーマでのユーザーレベルの使用は推奨されていません。代わりに権限グループと権限を使ってください。 inwp-includes/functions.php on line 3318」

エラー内容のfunctions.phpが原因では無く追加した(作成した)プラグイン側の問題ですので、無効にするか修正してください。

恐らく

add_options_page(‘Test Options’, ‘Test Options’, 8, ‘testoptions’, ‘mt_options_page’);
このようにaccess_level/capabilityの部分が8のように数字指定されているかと思います。古いプラグインには残っているかもしれません。

これは古い記述の仕方なのでadministratorなどと置き換えてください。

※最新になってない部分は英語版を参考にしましょう。

http://wpdocs.sourceforge.jp/%E7%AE%A1%E7%90%86%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AE%E8%BF%BD%E5%8A%A0

http://wpdocs.sourceforge.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90#.E7.AE.A1.E7.90.86.E8.80.85

WordPressからSMTP(Google Apps 二段階認証)

WordPressからSMTPにてメールの送信を行う場合、WP Mail SMTPを利用すると便利です。

通常は

 

SMTP:smtp.google.com

 

WP Mail SMTP 設定画面
WP Mail SMTP 設定画面

SMTP:smtp.google.com

SMTP Port:465

Username:xxxxx@gGoogleAppsのドメイン

Password:GoogleAppsのパスワード

で送信が出来ますが、GoogleApps側で二段階認証を行っている場合は通常のパスワードでは送信出来ません。

送信に利用するユーザでログインした状態で

https://www.google.com/settings/security

Google Appsのセキュリティ設定にてアプリ パスワードの設定を選択してください。

 

次の画面でアプリパスワードの設定を行います。

画面の下の方のリストボックスで選択をします。

端末を選択で「その他」を選択し、名前を入力します。この名前は適当でいいですが仮にWordPressとでも入力しておきましょう。

 

生成を押すと黄色い枠の中にアプリパスワードが表示されます。

このパスワードを先ほどのWP Mail SMTPの設定画面のユーザパスワードの部分に設定してください。

設定後はその下にあるテストで実在するメールを入力してみてください。

メールが届かず、結果画面でfalseが表示されたらメールの送信は失敗です。

Google Appsのポリシーや、ユーザアカウントの設定等も再度確認してください。

 

 

Chrome snifferがAppspectorに変更

chromeでそのサイトがWordPress使っているかとかNginx使ってるとか知るのに便利な

Chrom sniffer、そういえば最近反応していないなと思って管理画面で見てみると

snifferの文字では反応しなかった、検索してみるとAppspectorに変わったようで、ダッシュボードにもAppspectorというのが存在した。

有効になっているがWordPressのサイトを見ても反応しないので

一旦ゴミ箱で削除をしてから

 

https://chrome.google.com/webstore/detail/appspector/homgcnaoacgigpkkljjjekpignblkeae?hl=ja

再度chromeに追加したところ有効になった

 

 

 

 

 

 

Highchartsの棒グラフでX軸のラベルに時間を表示する。

棒グラフを表示するとtypeがdatetimeにしていても等間隔でラベルが表示されません。

その場合は


series: [{
type: 'column',
data: [[1413969960000,123.6],[1414009740000,73.4]],
pointRange: 4 * 3600 * 1000
}]

このようにpointRangeを指定します。

ちなみにtypeがlineやsplineの場合はpointRangeを指定しなくても

X軸のラベルは表示されます。

http://jsfiddle.net/u9jstkec/

Pdflibのログ出力

ログを出力する場合

set_parameterの第二引数にfilename=パスからのファイル名

を指定する。ログ・ファイルには書き込み権限が必要

例:$pdflib->set_parameter(“logging”, “filename=/var/log/pdflib.log”);

composerによるcakePHPのインストール

http://book.cakephp.org/2.0/ja/installation/advanced-installation.html
composer.jsonに
{
    "name": "example-app",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": ">=2.4.9"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

あとは
$php composer.phar install
とするだけ

requireの書き方を以前
"pear-cakephp/cakephp": "2.*"
このような形でかいていたんだけど
vagrantでprovisionしたときに
Your requirements could not be resolved to an installable set of packages.

 Problem 1
 - The requested package pear-cakephp/cakephp could not be found in any version, there may be a typo in the package name.
とのエラーが出たため

requreを
"cakephp/cakephp": ">=2.4.9"
とすることで実行可能だった