Apacheで2つのVirtualHostを設定したら1つがアクセスできなかった

Apacheで2つのVirtualHostディレクティブを設定したら1つがアクセスできなかった。
今回の結論はhttpd.confのListenディレクティブに2つ分のポートを指定していなかったから。

環境
CentOS 7
Apache 2.4.6

状況
VirtualHostディレクティブ

<VirtualHost *:10080>
:
</VirtualHost>

<VirtualHost *:20080>
:
</VirtualHost>

Listenディレクティブ

Listen 10080
Listen 20080    # ←これが抜けていた

「ss -natu | grep 10080」はあるけれど「ss -natu | grep 20080」は出てこない。
「/usr/sbin/httpd -t -f httpd_conf_path」を実施すると「Syntax OK」になる。
設定ファイルのテストをしてもエラーにならないので解決するのに手間取ってしまった。

外部ホストからMySQLへ接続できるように設定をする

外部ホストのコマンドプロンプトからコマンドラインでMySQLへ接続しようとしたら以下のエラーメッセージが出力された。

> mysql.exe -u user_name -p -h ip_address
Enter password: ********
ERROR 1045 (28000): Access denied for user 'user_name'@'ip_address' (using password: YES)

環境
外部ホスト:Windows10
MySQLサーバ:CentOS7, MySQL5.7

原因
MySQLは初期設定では外部ホストより接続できる設定になっていないため。

対処
GRANT文を用いて外部ホストより接続できるような設定を行う。
(追記)
CREATE USER文でユーザを追加しても外部ホストから接続可能(むしろ、CREATE USERしてからGRANTするのが正しい)。

やりかた

# CentOS7からMySQLサーバに接続する。
mysql -u root -p

# GRANT文で外部ホストのIPアドレスからのアクセスを許可するユーザを追加する。
# もしくはCREATE USER文で外部ホストのIPアドレスを指定したユーザを追加する。
GRANT ALL ON database_name.* TO 'user_name'@'ip_address' IDENTIFIED BY 'password';
CREATE USER 'user_name'@'ip_address' IDENTIFIED BY 'password';

# (おまけ)MySQLに接続できないようにする。
DROP USER 'user_name'@'ip_address';

CakePHP3で1Controller、1Templateのページを作る

CakePHP3で1Controller、1Templateのページを作る。
題材は画面から身長と体重を入力したらBMIを表示してくれるページ。入力チェックは実施しない。

環境
CakePHP 3.5.10

Controller
src\Controller\BmiController.php

<?php
namespace App\Controller;
use App\Controller\AppController;

class BmiController extends AppController
{
  public function index()
  {
  }

  public function calculate() {
    //$this->autoRender = false;
    $height = $this->request->getData('height') / 100;
    $weight = $this->request->getData('weight');
    $this->set('bmi', round($weight / ($height * $height), 1));
    $this->render('index');
  }
}

Template
src\Template\Bmi\index.ctp

<?php
$this->layout = false;
?>
<!doctype html>
<html lang="ja">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <title>bmi calculator</title>
  </head>
  <body>
    <div class="mx-auto" style="width: 400px;">
    <h1>bmi calculator</h1>
    <?php
    echo $this->Form->create('', ['url' => ['action' => 'calculate']]); 
    echo $this->Form->Control('身長(cm)', ['name' => 'height', 'required']);
    echo $this->Form->Control('体重(Kg)', ['name' => 'weight', 'required']);
    echo $this->Form->button('計算する', ['class' => 'btn btn-primary', 'type' => 'submit']);
    echo $this->Form->button('リセット', ['class' => 'btn', 'type' => 'reset']);
    echo $this->Form->end();
    ?>
    <?php if (!empty($bmi)): ?>
      あなたのBMIは<?= $bmi ?>です。
    <?php endif; ?>
    </div>
  </body>
</html>

ControllerとTemplateの作成が終わったらhttp://localhost:8765/bmiにアクセスすると以下のようなページが出力できる。

bmi-calculator
作成したページの画面

CakePHP3でデフォルトのレイアウトを無効にする方法

CakePHP3を始めてからctpファイルを用いて画面を表示させると緑色したヘッダー部分も一緒に表示される。
ちなみにこのヘッダー部分の記述はsrc\Template\Layout\default.ctpに書かれている内容。

このヘッダー部分を表示させたくないときにはctpファイルに以下の記述を追加してやればよい。

<?php
$this->layout = false;
?>

環境
CakePHP 3.5.10

CakePHP3で新しい設定ファイルを追加する

CakePHP3にはプロジェクトを新規作成したときからapp.phpという設定ファイルがある。
これとは別の設定ファイルが欲しくなった時に追加する方法。

環境
CakePHP 3.5.10

・config/other_config.phpを追加してファイルの中身に設定値として使いたい値を記述する。

<?php
return [
    'ccc' => 'ddd',
];

・config/bootstrap.phpにother_config.phpを読み込むように設定を追加する。

try {
    Configure::config('default', new PhpConfig());
    Configure::load('app', 'default', false);
    Configure::load('other_config', 'default', false); // 追加

・src\Controller\AaaController.phpを作成して以下のように記述する。

<?php
namespace App\Controller;
use Cake\Core\Configure;

class AaaController extends AppController {
    public $autoRender = false;
    public function bbb() {
        echo Configure::read("ccc");
    }
}

http://localhost:8765/aaa/bbb にアクセスするとブラウザにdddが表示される。

CakePHP3で設定ファイルapp.phpの設定値を取得する

CakePHP3で設定ファイルapp.phpの設定値を取得する。

環境
CakePHP 3.5.10

・config/app.phpの一番下に’ccc’ => ‘ddd’,を追記する。

    'Session' => [
        'defaults' => 'php',
    ],
    'ccc' => 'ddd',
];

・config/bootstrap.phpは最初からapp.phpが読み込まれているので修正は不要。

try {
    Configure::config('default', new PhpConfig());
    Configure::load('app', 'default', false);

・src\Controller\AaaController.phpを作成して以下のように記述する。
read()を使うためにConfigureクラスを使用可能にする。
設定ファイルに指定したキー名をread()の引数に指定すると設定ファイルの値を取得することができる。

<?php
namespace App\Controller;
use Cake\Core\Configure;

class AaaController extends AppController {
    public $autoRender = false;
    public function bbb() {
        echo Configure::read("ccc");
    }
}

http://localhost:8765/aaa/bbb にアクセスするとブラウザにdddが表示される。

CentOS7で起動時から有線ネットワークをオンにする設定

CentOS7は初期設定では有線ネットワークがオフになっていた。
毎回手動で直すのは手間だったので起動時にオンにする設定を入れた。

vim /etc/sysconfig/network-scripts/ifcfg-nameでファイルを開いて
ONBOOT=offからONBOOT=yesに変更して保存をする。

1.9. SYSCONFIG ファイルを使ったネットワーク設定

Android StudioでError:Failed to find Build Tools revision 26.0.2メッセージが発生したときの対処

Android StudioでError:Failed to find Build Tools revision 26.0.2メッセージが発生したときの対処。

Stack Overflowにわかりやすい回答があった。
How to solve failed to find build tools revision 26.0.2?

環境
Android Studio 3.0.1

手順
File-Settingsを選択する。
左のツリーからAppearance & Behavior-System Settings-Android SDKを選択する。
SDK Toolsタブを選択する。
Show Package Detailsチェックボックスにチェックを入れる。
Android SDK Build-Toolsの26.0.2にチェックを入れる。
Applyボタンを押下する。(ここで26.0.2のインストールが開始する)

以上を実施してからRefresh all Gradle projectsを実行したらエラーは解消された。

sedコマンドでファイルの中身を置換する

案件で同じプロジェクトの新しいbranchからsvn checkoutしたときに設定などをcheckoutしたマシン用に合わせる必要がある。
例えば以下のtest.cnfファイルの5行目をproductionからdevelopmentに変更するとき。
vimエディタなどで開いて変更してもいいけれどsedコマンドを用いても置換することができる。

test.cnfの中身
# cat -n test.cnf
1
2
3
4
5 $environment = ‘production’;

5行目のproductionをdevelopmentに置換するとき。
sed -i -e “5 s/production/development/g” test.cnf

NetBeansからCakePHP3のbin\cake serverを実行する

NetBeansでCakePHP3のソースコードを編集して動作を確認したいとき。
いつもコマンドプロンプトからbin\cake serverを実行していた。
NetBeansから実行する方法を探していたがなかなか見当たらなかった。

NetBeansの標準機能ではできなさそうだったのでプラグインを探して以下のプラグインを見つけた。
cakephp3-netbeans

環境
NetBeans 8.1
cakephp3-netbeans 0.4.0

・インストール方法
以下に書かれている手順通りでインストールができる。
https://github.com/junichi11/cakephp3-netbeans#how-to-install

・プラグインを有効化する手順
NetBeansのCakePHP3のプロジェクトを右クリックしてプロパティを選択する。
プロジェクト・プロパティが開くので左ツリーのフレームワークからCakePHP3を探す。
CakePHP3を選択してGeneralのEnabledチェックボックスにチェックを入れる。
これで有効化は完了。

・NetBeansからCakePHP3のbin\cake serverを実行する。
NetBeansのCakePHP3のプロジェクトを右クリックしてCakePHP3-Run serverを選択する。
http://localhost:8765にアクセスしてCakePHP3の画面が表示されればOK。

注意点
内部Webサーバーが動作しているとCakePHP3の画面表示が崩れて表示される可能性があるので停止させておく。