サイトのローカル試験と実ウェブ上の差を縮める手法(Perl)


公開 (UL): 2022-04-04
更新 (UD): 2022-04-04
閲覧 (DL): 2022-09-29

この記事のもくじ

→本文へ
当サイトは SNS の公式アカウントがないので,「議論ネタ」にする際は,皆さんのブログ,メーリングリスト,SNS や掲示板などで,適当にハッシュタグを付けたりリンクを掲載するなどしてご利用ください。

前の記事

2021-12-17
Perl で利用宣言時にモジュールをカスタマイズする

次の記事

2022-08-09
代表的な画像ファイル形式一覧

最近の記事

2021-06-01
Base54
2021-06-01
PPOP
2021-03-04
全角⇔半角の変換
2021-02-23
五十音の「辞書順」の処理
2020-12-22
年月日から曜日を求める数式
新着情報
She appears also the top page.

新着情報 Recent docs.

Sorry, but almost these pages are only Japanese.
個人情報の提示要求者側に求められる責任 «The responsibilities of the government that wants some private infomations.»
給付金の手続きに突然「旧住所」の提示を求めて来たお役所の対応の疑問からその「責任」を考える。
内閣支持率が高いワケ «Why the result of the enquête about the Japanese cabinet support rate is high.»
入浴中で出られなかった電話がその謎を解くヒントに!
日本の「IT 人材不足」の正体 «The simple reason why Japanese companies lack IT-skill.»
保険会社からのセキュリティガバガバメールが「IT 人材不足」の正体を暴く。
QR コードの功罪 «"Un-readable QR-code" discloses incompetences of the government in Nishi-tokyo city.»
西東京市から届いた「読めない QR コード」のチラシに見えたオヤクショの無能さ。
現場を知らないメーカーの夢想 «Makers say "we'll make good!" without investigation of working on-the-job.»
日経新聞記事の感想。「遠隔操作ロボットが医療介護現場で人材を活かす」という眉唾。
「マイナンバー」が危険なこれだけの理由 «The reasons of "My-Number System" is danger.»
それでも「マイナンバー」を推す裏の理由を推察。

人気記事 Frequent view pages.

オランダの介護に対する考え方一例
人気急上昇中! 検索語「オランダ 介護の考え方」での上位御礼!
表計算で「令和」に対応する方法
How to adapt the Gengo era "Reiwa" on spreadsheet applicaiton.

古いアプリも OK。「表計算 令和」の検索結果上位御礼!
表計算ソフトで予定表を自動作成する超便利な方法 «How to make the schedule table automatically on spread-sheet.»
「毎月第○×曜日」的な法則は自動で作らせてラクしよう!
表計算ソフトに「個人情報保護機能」を仕込む方法 «Prevention to leak private-data with spread-​sheet macro function.»
「漏えい」のためのフェイルセーフ。「表計算 個人情報」の検索結果上位御礼!
Wary-Basher (ワリバッシャー)
DIY device that enables the handicapped to operate many things with a switch like push-button.

障害者の様々な操作をスイッチ操作で実現する器具。キットも発売中! 「作り方」PDF ダウンロード多数御礼!←地方教育委で人気。
貧乏人を殺す行政の構造 «Structurally, the administrators kill the poors in Japan.»
ヘタすると多摩川に流されるところだった台風 19 号

この記事に対する → 調布市の反応

おすすめ! Recommend

文字ベース天気予報 «Weather forecast in text mainly from JMA Json-data.»
古いブラウザやスマホ,音読ソフトでも大丈夫! 気象庁の JSON データを利用した文字ベースの天気予報(試験版)。
「事故防シート」について «Cared persons taking with "Jiko-​Bow-​Sheet" prevents from accidents.»
介護現場の負担軽減と事故防止のアイデア
【連載】 キーボードの「キー」の詳しい使い方 «The detial of usage each key on keybord.»
各キーの機能詳細。機能別五十音順一覧。
和易ゐ記 (WAI-WIKI) «WAI-WIKI is light­weight markup language for Japanese, and generates HTML on this server on-​demand.»
当サイトで開発/使用中の日本語向けに特化した軽量マークアップ言語
コロナ検査所一覧 «Light search for corona-test station.»
東京都サイトで配布の CSV ファイルを元に検索。スクリプト不使用のため,古い機械やブラウザ,音読ソフトでも大丈夫!

ご連絡 Contact

▼ メールフォームはこちら
SSL 証明書の更新に不具合が多いため,期限切れエラーが出た際は,お手数ですが「例外指定」をお願いいたします。

ファイルの暗号化
当サイト管理者(石川)宛にメール添付で送信するファイルを暗号化したい時は,唯一のパスワードを PPOP で取得できます。 PPOP gives a password for encryption of the file(s) attached your mail to the admini­strator of this site M.Ishikawa.
PPOP

時事川柳 News Senryu

パパ育休
 あきらめられた
  テレワーク

 「産後パパ育休」制度が 10 月からスタートするんだってさ。いや,「テレワーク」が浸透すりゃ要らんのじゃないのか? アフターコロナで「通勤」を完全復活させることを前提にしている感じの違和感……。(2022-09-15)

ご支援 Support this site.

まだまだ コロナ失業中!!
CORONA-NEET, seeking works now!

この活動をご支援いただける方はこちらへ Could you support this site, see here (but Japanese).

 サイトを構築する際,ウェブで実運用する前に手元のローカル環境で振る舞いを試験することは当然あるわけだが,試験がうまくいったとして,それをそのままウェブにアップすればうまくいくかというと,そう簡単じゃない。ローカル環境からウェブ環境向けのカスタマイズが要るわけで,その環境設定の変更時に,ローカルで気付かなかった不具合が出る可能性も多々ある。その調整の負担はなるべく軽くしたいところ。

 ここでは,筆者が試した手法を備忘録しておこうと思う。

● サイトごとの環境を自動設定

 要は,環境設定を自動でしてくれる仕組みにすればいいわけだ。
 とはいえ,それもまた一筋縄ではない。だいたい,誰でも見れる CGI では,環境変数(%ENV)にユーザ名やホームディレクトリ(/home/user など)が渡されないため,どちら(ローカルかウェブ上か)の環境下で実行されているのかをスクリプト自身が知る方法が限られる。

 ひとつの方法としては,「ホスト名」は環境変数で渡されるのでそれを利用することが考えられる。まず CGI スクリプトを置いたディレクトリ(/cgi-bin など)に以下のソースを置く。

▼ siteconf.pl
   if( !($_ = $ENV{ HTTP_HOST }) ){ $_=`hostname`; chomp; }
   if( /^(shanaiserver01|localhost|127\.0\.0\.1)$/ ){
	#	ローカル試験環境の設定
   }
   elsif( /^www\.hostname\.co\.jp$/ ){
	#	実際のウェブ運用上の設定
   }

 で,「Apache の場合」または実行させるスクリプトが「シンボリックリンクではない場合」は,同じディレクトリに置いた CGI スクリプトで,最初のほうに必ず以下を置くようにして上記を呼び出せば,ローカル環境と実ウェブ上のサイトの設定が自動的にされる。

▼ CGI スクリプト側の処理
   do "./siteconf.pl";

 この方法の利点は,「内容が全く同一のファイルを単純コピーすれば済む」という点。環境に応じて設定ファイルを作り直す必要がない。

◆ hostname を再利用

 siteconf.pl 処理終了時に,グローバル変数に hostname を保存しておけば,siteconf.pl の実行から戻ってから CGI 内で個別の環境設定に利用できる。

▼ siteconf.pl の2行めに挿入
   ${^_HOSTNAME}= $_;
▼ CGI スクリプト側の処理
   do "./siteconf.pl";
   if( ${^_HOSTNAME}=~/^(shanaiserver01|localhost|127\.0\.0\.1)$/ ){
	#	CGI 特有のローカル環境の設定
   }
   elsif( ... (以下「他ホスト環境下の設定」省略)

 この ${^_HOSTNAME} のように ^_ で始まる変数は,必ずグローバル扱いになるらしい。詳しくは以下を参照。

▼ Perl で利用宣言時にモジュールをカスタマイズする
http://treeware.jp-help.net/?ssss11

 あるいは呼び出す側で,たとえば $HOSTNAME などを our 宣言しておいて,そこに siteconf.pl 内で代入しても可能ではある。

◆ Apache 以外,シンボリックリンクは注意

 ただ,Apache 以外の HTTP サーバソフトで,同じディレクトリ上にシンボリックリンクを置いて,実際のスクリプトファイルがそこにない状態で使っていた場合,上記「CGI スクリプト側の処理」のような書き方では,うまくいきそうにないケースがあった。筆者のローカル環境で使っている minihttpd というホストは,シンボリックリンクを辿った先で CGI が実行されてしまうらしい。たとえば,以下のような場合。

▼ スクリプトのある場所
   $> ls /home/user/cgis
   -rwxr-xr-x userreg.cgi
   $> ls /home/user/public_html/cgi-bin
   -rw-r--r-- siteconf.pl
   lrwxrwxrwx userreg.cgi -> /home/user/cgis/userreg.cgi

 userreg.cgi の最初のほうで,前述した do "./siteconf.pl" を実行しているものとする。このスクリプトは,実際は /home/user/cgis にあるが,CGI 公開用ディレクトリの /home/user/public_html/cgi-bin にそのシンボリックリンクを置き,それをブラウザから呼び出した場合は,Apache ではうまくいくが,minihttpd ではダメらしい。調べると環境変数に以下のような違いがあった。

▼ minihttpd の場合
   $ENV{ SCRIPT_FILENAME }="/home/user/cgis/userreg.cgi"
▼ Apache の場合
   $ENV{ SCRIPT_FILENAME }="/home/user/public_html/cgi-bin/userreg.cgi"

 minihttpd ではリンク先のディレクトリ上でスクリプトが実行されるようで,そこに siteconf.pl はなく do "……" が無視されるために,サイトの設定が正しく行なわれない。
 これを回避するには,何らかの方法でスクリプトが呼び出されたディレクトリの情報を知る必要がある。シェルの pwd コマンドか,Perl のモジュールにある Cwd.pm を使うとうまくいくみたいだ。

▼ CGI スクリプト側の処理(pwd)
   $_ = `pwd`; chomp; do "$_/siteconf.pl";
▼ CGI スクリプト側の処理(Cwd)
   use Cwd; do cwd."/siteconf.pl";

 ただ,Cwd の場合は,他のメソッドも含めた準備などで,600 行ものソースを読むので,ひょっとすると pwd のほうが軽いかもしれない。
 実行されているスクリプト名が実ファイルの場所ならディレクトリもそっちになり,そこに siteconf.pl はなさそうに思うが,上記のやり方で siteconf.pl と同じ位置が示されるから,これでいいのだろう。

 ちなみに $0(=スクリプト名)を見ると,minihttpd ではディレクトリのないファイル名のみだった。Apache ではフルパス名だった。



© M.Ishikawa; TREEWARE 2022.