Archit!! RSSフィード Twitter

2017-05-16

phpMyAdminのログインループ

phpMyAdminログイン画面でログインしようとすると、先に進まずにずっとログイン画面が表示されてしまう。

あ、いや、MySQLへのアクセスは、コマンドかMySQL Workbenchを使うので、普段はphpMyAdminを全く使わない(除くレン鯖)のだからいいのだけど、授業で使う関係で、新しいXAMPP(7.1.4)をインストールしたら問題が発覚した。

XAMPPインストール直後のMySQL(正確にはMariaDBだが)はrootパスワードが設定されていない。しかも、phpMyAdminにアクセスすると、無条件でrootログインした状態の画面が表示される。これは全くもって問題なので、何はともあれ

を設定するのが定石である。今回もこれを行った。そして、phpMyAdminログイン画面でrootログインしようとすると、何のメッセージもなくログイン画面が表示されたままになってしまう。試しに間違ったパスワードを入力すると、ちゃんとエラーメッセージが表示される。つまり、ログイン処理は正常に行われているのだが、その後の画面へ遷移しないのだ。あーだこーだと調査して原因がはっきりした。犯人はphp.iniの

session.auto_start=1

だった。ボクは、PHP開発ではsession.auto_startはOnで行っている。なので、まずこの設定を行うのだが、これが悪さしている。この設定を

session.auto_start=0

とすると、無事ログイン後の画面が表示されるのだ。XAMPPの5.6系列ではこんな問題はなかった。

さてさて、どうするか。この時に便利なのがローカル設定。ローカル設定は、

の3種の方法がある。通常は、.user.iniを選ぶところだが、これまたXAMPPでは.user.iniが効かないのだ。しかも、.htaccessXAMPPphpMyAdminの設定は

AllowOverride AuthConfig

となっていて、書き換えができない。そこで最後の方法を選択するしかない。XAMPPphpMyAdminApache設定は、httpd-xampp.confファイルに書かれている。このファイルは、

にある。Windowsの場合は、XAMPP Control PanelのApacheのConfigボタンをクリックしても編集できるようになっている。

このファイルのWindowsなら91行目、Macなら19行目当たりにある

<Directory "…phpMyAdmin">
  AllowOverride AuthConfig
  Require local
  ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

<Directory "…phpMyAdmin">
  php_flag session.auto_start Off  # ←
  AllowOverride AuthConfig
  Require local
  ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

のように書き換える。矢印の1行が増えている。これで、Apache再起動したら、無事phpMyAdminログインできた。

2017-04-18

Mac版EclipseのTomcatプロジェクトでアプリルートが1文字切り詰められる件の対処法

MacEclipseTomcatプロジェクトを作成する際に、環境によってはアプリのルートディレクトリの末尾の1文字が削られることがある。

f:id:architshin:20170418233310p:image:w360:left

例えば、Tomcatプロジェクト作成ウィザードで「Hoge」プロジェクトを作成しようとして、第1画面ではプロジェクト名に「Hoge」と入力する。[次へ]をクリックし、の第2画面で左のように、コンテキスト名、アプリのルートともに「/hoge」と入力したとしよう。

f:id:architshin:20170418233630p:image:w360:left

すると、出来上がったプロジェクトは左のようにアプリのルートディレクトリが「hog」と最後の「e」が欠落した状態となっている。これは、Eclipse Tomcat Pluginのバグではないかと思うのだが、どういった環境で発生するのか掴めていない。いずれにせよ、発生した場合は手動で直す必要があるのだが、よく直し方の質問を受けるので、ここにまとめておくことにしよう。

以下の作業を行う。なお、作業中にはプロジェクトのエラーが発生するが気にせず最後まで行う。

  1. アプリのルートディレクトリ(上記例では「Hoge/hog」)を正しいディレクトリ名に変更する。上記例では、「hog」を「hoge」に変更する。
  2. パッケージエクスプローラー上で「hoge」フォルダを開くと、「hoge/WEB-INF/src」フォルダが存在するので、それを右クリックし、
    ビルドパス]>[ソースフォルダとして使用]
    選択。すると、パッケージエクスプローラー上に「hoge/WEB-INF/src」というソースフォルダが出現する。
  3. プロジェクトフォルダを右クリックし、
    ビルドパス]>[ビルドパスの構成]
    選択。[ソース]タブを選択し、
    1. 欠落しているソースフォルダ(例では「Hoge/hog/WEB-INF/src」)を選択し、[除去]ボタンをクリックする。
    2. 下にある[デフォルトの出力フォルダ]欄が現在「Hoge/hog/WEB-INF/classes」のように1文字切り詰められたフォルダになっているので、ここを「Hoge/hoge/WEB-INF/classes」のように正しく修正し、[OK]をクリック。
  4. 最後に、パッケージエクスプローラ上に残った1文字切り詰められたフォルダ(ここでは「hog」フォルダ)を削除。

これで問題が解決する。

いずれにせよ、このバグ、直してほしいものだ。

2017-04-05

NeonにEclipse Tomcat Plugin

JavaによるWebシステム開発Eclipseを使用する場合、最近はJavaEEパースペクティブを使った動的Webプロジェクトが主流みたい。ただ、ある程度小規模のWebシステム、特にTomcatベースの場合はJavaパースペクティブTomcatプロジェクトを使用したほうが、小回りがきいて開発しやすい。現に、ボクは相変わらずTomcatプロジェクトだ。

ところが、Pleiades All in OneのNeonには、このTomcatプロジェクトを作成するためのEclipse Tomcat Pluginが含まれなくなった。Marsまでは含まれていたのに。

ということで、手動でインストールする必要がある。Eclipse Tomcat PluginのTOPページを見てもUpdateSiteへのリンクが書かれているので、これを利用すればインストールできる。さらに、最近の方法では、Eclipseマーケットプレースを利用することもできる(こちらがそのページ)。

ところが、この両方ともインストールできないのだ。やろうとすれば、エラーが出てしまう。どうも、JREセキュリティ関係の問題らしい。こちらに報告がある。このやり取り中にあるように、セキュリティポリシのファイルを別途ダウンロードしてEclipseが起動に使用しているJREライブラリを書き換えれば無事インストールできるのだが、これはこれで問題。

そこで、上のやり取りの一部に書かれているように、以下の方法を使用すると、セキュリティポリシを変更しなくてもインストールできる。

  1. UpdateSiteの「Download update site archive (1.5 MB)」のリンクからzipファイルをダウンロードする。
  2. Eclipse
    [ヘルプ]>[新規ソフトウェアインストール
    で表示されたインストール画面で、サイトの追加ボタンをクリック。
  3. 表示されたダイアログで、URLを入力するのではなく、[アーカイブ]を選択し、1でダウンロードしたzipファイルを指定し、[OK]をクリックする。

あとは、通常のUpdate Siteからのインストールと同じように、インストール画面を[次へ]、[次へ]とクリックしていけば、インストールできる。

2017-02-22

Bootstrapのform付モーダルをiOS上で表示するには

Bootstrapのモーダルはすごく便利。

ただ、form付モーダルをiOS上で表示させる際には注意が必要。入力部品を選択し、バーチャルキーボードを表示させたが最後、画面をスクロールさせるとモーダルじゃなくて背景の画面がスクロールしてしまう。これは、Bootstrapのバグで、ちゃんと公式サイトにも記述がある。そこには解決策も書かれていて、手動でモーダルのCSSを「position: absolute 」に変更してあげればいいらしい。ということで、モーダルを表示するJavaScriptを以下のように記述すれば解決した。

$("#mymodal").on("show.bs.modal", function(e) {
	if(navigator.userAgent.match(/iPhone|iPad|iPod/i) ) {
		$(".modal").css({
			"position":"absolute",
			"marginTop": $(window).scrollTop() + "px",
			"bottom":"auto",
			"width":"95%"
		});
	}
});

2017-01-24

Vagrant+CentOS7でネットワークの自動再起動

Vagrant+CentOS7でのネットワーク不具合 - Archit!!の続き。

ネットワークを自動再起動する方法を見つけたのでメモ。Vagrantのprovision機能を使えばいい。Vagrantfileに以下の内容を追記。

config.vm.provision "network-restart", 
	type: "shell",
	run: "always",
	inline: "sudo service network restart"

ポイントは「run: "always"」とすること。こうすることで、up時に常にinlineで記述された、コマンドが実行される。