Archit!! RSSフィード Twitter

2017-09-14

Heroku Pipelineでステージング環境のDBをReview Appsにコピー

現在開発が継続中のシステムがあるのだが、Heroku上で稼働している。

先日セールスフォースの阿部さんのWebinarでそのHerokuのPipelineについて知る機会があり、感動のあまり早速取り入れることにした。それと同時に開発フローをGitHubフローに変更。このあたりは、Herokuとチーム開発のおいしいレシピ?HerokuとGitHubを連携してCI/CDを実現する (1/5):CodeZine(コードジン)の記事に詳しい。実際、ボクが受けたWebinarはこの記事をベースにしたものだった。

もともとテスト環境用にappを用意していたので、それをステージング用に設定すればPipelineが完成。

ところが少し問題が。ステージング用appはもともとテスト用なのでDBが完備されている。一方、この環境をベースにしたReview Appsの方はDBが整備されていない。もちろん、Heroku Postgresのadd-onは追加され、DATABASE_URLも個別のものが設定されているが肝心の中身がないのだ。

そこで、Review Appsが作成される際に、ステージング用appからDBの中身をコピーするようにしなければならない。このことは、こちらのマニュアルの注意書きにちゃんと書かれている。

試行錯誤の結果、以下のようにしたらできた。

  • ステージング環境に環境変数STAGING_DATABASE_URLを用意し、DATABASE_URLの内容をコピー。
  • Review Appsではその内容を引き継げるようにapp.jsonに記述。これは、
    "env": {
        "STAGING_DATABASE_URL": {
          "required": true
        },
    
    のように記述する。
  • app.jsonのpostdeployスクリプトDBのコピーコマンドを記述する。
    "scripts": {
       "postdeploy": "pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL"
    },
    

これで、ステージング環境のDBが丸ごとコピーされる。

ただ、このやり方にも少し不満がある。それは、Herokuは定期的にDATABASE_URLを値を変えるのだが、その時に手動でSTAGING_DATABASE_URLも書き換えないといけない。このあたりも自動化できないものだろうか。

2017-09-05

Composerで環境チェックを無視

現在開発中のPHPシステムの開発環境を別のMacに作ろうとしたときに、composerコマンドで少し困った問題が発生。

システム自体はMac上でコーディングしているが、それが実際に動作しているのはVagrantで構築したLinux仮想環境。もちろん、Mac上のプロジェクトフォルダと仮想環境のドキュメントルートは同期してある。実際にシステムが動作するのがLinux仮想環境なので、PHPのバージョンなどは仮想環境の方だけ注意していれば問題ない。

はずだったのだが、Mac上のプロジェクトフォルダでcomposer installコマンドを実行するとエラーが発生する。

your PHP version (5.6.30) does not satisfy that requirement.

そう。

Mac内にはあらかじめ5系の古いPHPが入ってしまっているのだ。composerがそっちを認識してしまう。もちろん、Linux仮想環境の方からcomposerコマンドを実行すればうまくいくのだろうが、何かいい方法はないものだろうかと調べたら、オプションがあった。

composer --ignore-platform-reqs install

Macの環境の方を無視してくれる。

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からのインストールと同じように、インストール画面を[次へ]、[次へ]とクリックしていけば、インストールできる。