VagrantでNAT接続してホストPCのブラウザからゲストにアクセスする。

設定のメモ

NAT接続でホストマシンの8080へのアクセスはゲストマシンの80にポート転送する設定。

Vagrantfileに以下を記載。

config.vm.network :forwarded_port, guest: 80, host: 8080

vagrant up でマシンの起動。
ゲストマシンでwebサーバを起動して、

http://localhost:8080/

にアクセスしてページが出ればOK。

こうすることで、ネットにつながっていない環境でも1PC内でアプリケーションの
開発とかとりあえずできる。

 

gitで間違って違うリポジトリからpullしてしまった場合の対処方法

gitで間違って違うリポジトリからpullしてしまった場合の対処方法

間違って焦ったのでメモ。
まずはgit logで状況を確認。

■最新のコミットをなかったことにする

$ git reset HEAD^

■git resetしただけではpullしてしまったファイルが残ってしまっているので不要ファイルを削除する

「git clean」作業ツリーのバージョン管理外のファイルを削除する

・削除対象となるファイルを確認する

$ git clean -n

・削除対象のファイルを削除する

$ git clean -f

gitで変更してしまったファイルをまとめて元に戻したい場合

gitで変更してしまったファイルをまとめて元に戻したい場合

「git checkout」は指定したブランチ、タグ、コミットに作業ツリーを切り替えたり、
別ブランチで作業したい場合、特定のコミットからファイルを取り出したい場合など
様々な場面で利用します。

事前に現在変更した内容を確認します。

$ git status

■1ファイルずつ現在のブランチのコミット時の状態に戻したい場合

$ git checkout -- ファイル名

■まとめて現在のブランチのコミット時の状態に戻したい場合

$ git checkout .

↑これが知りたかっただけ。。

■参考

git checkout 使い方

PHP:BDDを試す。Behat+Mink+Selenium編

PHP:BDDを試す。Behat+Mink+Selenium編

前回のページはこちら

今回はSeleniumも利用し実際にブラウザが立ち上がって挙動が確認できるようにする。
※前回のcomposer.jsonで「mink-selenium2-driver」入れてるので今回はcomposerは触らない。

Video: Quickstart to testing with Behat, Mink, and Selenium

今回も上記サイトを参考に。

今回の構成
■SeleniumServer
OS:Windows7
IP:192.168.1.10
seleniumで使うブラウザIE11
javaインストール済み

■開発サーバ
OS:CentOS6.5(Vagrant環境↑のwindows内にある)
IP:192.168.1.226

■SeleniumとIEのドライバーの取得(※SeleniumServer側PCでの作業)

http://docs.seleniumhq.org/download/
上記ページ内の「Selenium Server (formerly the Selenium RC Server)」をダウンロード
現時点では「Download version 2.40.0」

IEのドライバは「The Internet Explorer Driver Server」
Download version 2.40.0 for (recommended)
32 bit Windows IE
64 bit Windows IE
上記のどちらかを環境に合わせてダウンロードする。zipなので解凍して中身を
Seleniumの本体と同じところにおいておく

■Seleniumを起動しておく(※SeleniumServer側PCでの作業)

C:>java -jar selenium-server-standalone-2.40.0.jar -Dwebdriver.ie.driver=.\IEDriverServer.exe

※IEを使う場合の起動方法

■behatの設定ファイルであるbehat.ymlの変更(以下開発サーバ側での作業)

$ vim behat.yml
default:
  paths:
    features: features
    bootstrap: %behat.paths.features%/bootstrap
  context:
    parameters:
      browser: ie
      javascript_session: webdriver
  extensions:
    Behat\MinkExtension\Extension:
      browser_name: ie
      goutte: ~
      selenium2:
        wd_host: 'http://192.168.1.10:4444/wd/hub'
        capabilities: { "browser": "ie", "version": "11"}

■test.featureシナリオを変更

$ vim features/test.feature
Feature: Drupal.org search
  In order to find modules on Drupal.org
  As a Drupal user
  I need to be able to use Drupal.org search

  @javascript
  Scenario: Searching for "behat"
    Given I go to "https://drupal.org"
    When I fill in "Search Drupal.org" with "behat"
    And I press "Search"
    Then I should see "Behat Drupal Extension"

■behatを実行

$ ./vendor/bin/behat

※IEが立ち上がらない場合は以下を試す。
インターネットオプションのセキュリティ設定を統一する。
インターネットオプション>セキュリティ>4つの項目(インターネット、ローカルイントラネット、信頼済みサイト、制限済みサイト)
の保護モードを有効にするチェックを全て外す(もしくは全てチェックする)。
その後IEを再起動する。

PHP:BDDを試す。Behat+Mink編

PHP:BDDを試す。Behat+Mink編

BDDに興味をもったのでまずはbehatを試してみる。

Video: Quickstart to testing with Behat, Mink, and Selenium

上記の動画を参考に写経。

今回の構成
■開発サーバ
OS:CentOS6.5(Vagrant環境:windows7内にある)
IP:192.168.1.226

■composerの設定

適当なフォルダに移動してcomposer.jsonを作成する。
※composer自体はインストールしてるとする。

$ vim composer.json
{
  "require": {
    "behat/behat": "2.4.*@stable",
    "behat/mink": "1.5.*@stable",
    "behat/mink-goutte-driver": "*",
    "behat/mink-extension": "*",
    "behat/mink-selenium2-driver": "*"
  }
}

■behat,minkのインストール

$ php composer.phar install

■behatの設定ファイルであるbehat.ymlを作成

composer.jsonと同じ場所にbehat.ymlを作成する。

$ vim behat.yml
default:
  paths:
    features: features
    bootstrap: %behat.paths.features%/bootstrap
  extensions:
    Behat\MinkExtension\Extension:
      goutte: ~

■behatを初期化(featuresフォルダが作成される)

$ ./vender/bin/behat --init

■test.featureシナリオを作成

※ファイル名は適当です。

$ vim features/test.feature
Feature: Drupal.org search
  In order to find modules on Drupal.org
  As a Drupal user
  I need to be able to use Drupal.org search

  Scenario: Searching for "behat"
    Given I go to "https://drupal.org"
    When I fill in "Search Drupal.org" with "behat"
    And I press "Search"
    Then I should see "Behat Drupal Extension"

■minkを利用するために「FeatureContext.php」を修正

useやextendsを変更

$ vim features/bootstrap/FeatureContext.php
<?php

use Behat\Behat\Context\ClosuredContextInterface,
    Behat\Behat\Context\TranslatedContextInterface,
    Behat\Behat\Context\BehatContext,
    Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
    Behat\Gherkin\Node\TableNode;
use Behat\MinkExtension\Context\MinkContext;
//
// Require 3rd-party libraries here:
//
//   require_once 'PHPUnit/Autoload.php';
//   require_once 'PHPUnit/Framework/Assert/Functions.php';
//

/**
 * Features context.
 */
class FeatureContext extends MinkContext
{
    /**
     * Initializes context.
     * Every scenario gets it's own context object.
     *
     * @param array $parameters context parameters (set them up through behat.yml)
     */
    public function __construct(array $parameters)
    {
        // Initialize your context here
    }

//
// Place your definition and hook methods here:
//
//    /**
//     * @Given /^I have done something with "([^"]*)"$/
//     */
//    public function iHaveDoneSomethingWith($argument)
//    {
//        doSomethingWith($argument);
//    }
//
}

■behatを実行

$ ./vendor/bin/behat
Feature: Drupal.org search
  In order to find modules on Drupal.org
  As a Drupal user
  I need to be able to use Drupal.org search

  Scenario: Searching for "behat"                   # features/test.feature:6
    Given I go to "https://drupal.org"              # FeatureContext::visit()
    When I fill in "Search Drupal.org" with "behat" # FeatureContext::fillField()
    And I press "Search"                            # FeatureContext::pressButton()
    Then I should see "Behat Drupal Extension"      # FeatureContext::assertPageContainsText()

1 scenario (1 passed)
4 steps (4 passed)
0m2.492s

とりあえず動いた。
次回はSeleniumを追加してブラウザでの挙動を確認する。

MySQL:”ERROR 1033 (HY000): Incorrect information in file:”

MySQL:”ERROR 1033 (HY000): Incorrect information in file:”

MySQLのメモリ関係のパラメータで
「innodb_buffer_pool_size」の変更にあわせて
「innodb_log_file_size」を変更してMySQLを再起動したら
“ERROR 1033 (HY000): Incorrect information in file:”
が出た。

参考URLの内容そのままだけど、

/var/lib/mysql/ib_logfile0
/var/lib/mysql/ib_logfile1

↑とかのトランザクションログっぽいファイルを退避して
それからMySQLを再起動すれば直る。(パスは設定による)

※innoDB系のメモリのデフォルト値は以下

mysql> SHOW VARIABLES LIKE “innodb_%_size”;
+———————————+———+
| Variable_name | Value |
+———————————+———+
| innodb_additional_mem_pool_size | 1048576 |
| innodb_buffer_pool_size | 8388608 |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
+———————————+———+

■参考URL
shin3tky blog:MySQL の innodb_log_file_size の調整

kakakikikekeのブログ:ERROR 1033 (HY000): Incorrect information in file

初心者のプログラムメモ:mysql ERROR 1033 (HY000): Incorrect information in file:

Before Today:MySQL|mysql ERROR 1033 (HY000): Incorrect information in file:

OpenVZのリソース状態を確認

OpenVZのリソース状態を確認する。

コンテナ側で以下のコマンドを実行

# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
171: kmemsize 8808593 10514432 14372700 14790164 0
lockedpages 0 0 2048 2048 0
privvmpages 86999 152549 262144 262144 0
shmpages 4511 5807 21504 21504 0
dummy 0 0 0 0 0
numproc 65 86 240 240 0
physpages 58785 457240 0 2147483647 0
vmguarpages 0 0 131072 131072 0
oomguarpages 43503 52001 26112 2147483647 0
numtcpsock 28 39 360 360 0
numflock 16 188 188 206 3819
numpty 4 6 16 16 0
numsiginfo 0 15 256 256 0
tcpsndbuf 213856 1438168 1720320 2703360 0
tcprcvbuf 214040 1718240 1720320 2703360 2
othersockbuf 15736 198024 1126080 2097152 0
dgramrcvbuf 0 4296 262144 262144 0
numothersock 114 120 120 120 17517
dcachesize 2887879 3624960 3409920 3624960 0
numfile 1148 1340 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 128 128 0

「failcnt」が0なら健全らしい。

そもそもなんで今回この値を確認したくなったかというと、
コンテナ中にsambaをインストールしている環境でコンテナ側からwindows上にファイルを
コピーすると途中で止まると言われたから。

上記の結果からすると「numflock」と「numothersock」が良くない感じになっている。
それぞれの意味はこちら。

【numflock】
全てのVPS プロセスが作成するファイルロックの数

【numothersock】
TCP 以外のソケットの数。ローカル(UNIX ドメイン)
ソケットはシステム内の通信に使用されます。
UDP ソケットは、ドメインネーム サービス(DNS)の
クエリなどに使用されます。
UDPおよびその他ソケットで使用されます。

とりあえず「numothersock」から上限をあげてみた。

vzctl set 171 --numothersock 512 --save

で、もう一回samba経由でファイルを大量にコピーしてもらうも駄目。
でも「numothersock」のfailcntは増えなくなったのでこれはこれでいいみたい。

次に「numflock」も上限をあげてみる

vzctl set 171 --numflock 350 --save

で、もう一回samba経由でファイルを大量にコピーしてもらうも駄目。
「maxheld」の値が350までいってしまったのでまだ足りないということか、、、。
だめもとで一回無制限にしてみる

vzctl set 171 --numflock unlimited --save

この状態でsamba経由で大量にファイルをコピーしてもらったら出来た!
終った状態で「numflock」の「maxheld」を見ると2071だった。。
全然足りてなかったな。。

とりあえずこれでOKということにしておく。
今回初めてunlimitedなんていう設定値があることを知った。
OpenVZ環境で何か問題があったら「/proc/user_beancounters」をみよう。

PHP5.3環境でPHP Parse error: syntax error, unexpected $end in …

PHP Parse error: syntax error, unexpected $end in …

いまさら感満載ですが、PHP5.1.6環境で正常に動作していたプログラムをPHP5.3.3環境に
移したら
「PHP Parse error: syntax error, unexpected $end in …」
このエラーが表示されるようになった。

Parse error: syntax error, unexpected $end in について

上記サイトにあるような対策を打とうにもそもそもPHP5.1.6
環境で動いていたので、多分そうじゃない。

色々やってみて結局PHPの「short_open_tag」の設定の違い
だとわかった。
PHP5.1.6環境では「On」になっていたがPHP5.3.3環境では「Off」
になっていた。

とりあえず.htaccessに

php_flag short_open_tag on

と記述して対応。

Windows7でWindows Updateしたらコード643で失敗した

Windows7でWindows Updateしたらコード643で失敗した。

調べてみると同じ現象の人がいた。

Windows Updateで失敗、エラーコード643の解決方法

 

自分の環境の場合Fix itはうんともすんとも言わなかったので、 .NET Frameworkの修復から行った。

修復したあとは再起動も要求されなかったけれど再度Windows Update したら正常にUpdateされた。

良かった良かった。

【MySQL】 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’

mysql5.0の環境で動いていたものをmysql5.5の環境に移行したら以下のような
エラーが発生した。。

General error: 1267 Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation ‘like’

このエラーは(utf8_general_ci,COERCIBLE)がサーバ側のコード
(latin1_swedish_ci,NUMERIC)がクライアント側のコード
ということらしい。
文字コードが違うからlikeで調べられないよっていうことっぽい?

よくわからないので参考URLなどをもとに調査。

クライアント側の文字コードをプログラムで調べるとASCIIになっていたので、
UTF-8に変換するのか?とか思ってやってみるもASCIIで取り扱われる。。

そもそもutf8_general_ciとなっているサーバ側のカラムはDATE型。
DATE型にUTF-8とかあるのかよくわからない。
型の問題なのかと思ってとりあえずカラムを文字列型に変更。

ALTER TABLE `テーブル` CHANGE COLUMN `対象カラム` `対象カラム` VARCHAR(10) NOT NULL  ;

カラム側を文字列に変換したらエラーが無くなった。

でもカラムの意味としてはDATEが正しいのでカラム型を変換するのは気持ち悪い・・・。
さらに調査。。その後以下のページを発見。

Illegal Mix Of Collations While Comparing Datetime with String

selectするときにデータベース側の列をDATE_FORMATで変換してあげればいいということらしい。

とりあえず動いた!

「llegal mix of collations」のエラーは色々な原因が
考えられるややこしい問題なんだということがわかった。

■参考URL

mysql の utf8_general_ci と utf8_unicode_ci の混在でエラー

Illegal mix of collations:ほんとに漢字コードの問題はややこしい ・・・ 【MySQL】

migrateでInnoDBの文字コードをutf8に

ω・)。○(思いつき広場 Illegal mix of collations

MYSQLへの接続を永久UTF8化:Illegal mix of collations

concrete5の検索ブロックで mysql error: Illegal mix of collations for operation ‘like’

Illegal Mix Of Collations While Comparing Datetime with String

MySQL DATE_FORMAT(date,format)