2019/07/29

Ruby (4) カウンター問題の原因と対策

前回、Ruby で作成したアクセスカウンターがリセットしてしまった件について書きました。その後、ソースを読んで原因について考えました。カウンタは count1.dat などのテキストファイルに格納されていて、読み込む際にエラーが起きるとファイルの内容は無視して変数 count に必ず1を設定しています。そのためオープン/読み込み/クローズのいずれかでエラーが起きリセットしてしまっている可能性が非常に高いと思います。

おそらく複数のサイトから同時にアクセスがあった場合にこのようなことが起きると推測できます。時間を置いて再度チャレンジすればうまくいく可能性が上がるでしょう。

対策としては、上記のようにリトライしてみるということと、同様の問題が起きたときのためにエラーログを残すことの両方を実現する予定です。

リトライでは乱数を使用して100ms単位でスリープしたのち再度読み込むようにしたいと思います。

エラーログについては、rescue => e とすると e にエラーの内容を獲得できるので、これと日時の情報をログファイルに書き込むようにしたいと思います。

それから、カウンタ用ファイルへの書き込みの際はファイルのロックもエラー処理も行っていませんでしたが、こちらも読み込みの際と同様の処理を追加したいと思います。

(つづく)

関連項目

| | コメント (0)

2019/05/29

Ruby (3) カウンターがリセット!

3年ぶりの Ruby に関する投稿になります。3年前に作成したアクセスカウンターが順調に動いていた(と思う)のですが、この度、その一つがリセットしていることに気づきました。5月10日現在で 3146 までいっていたはずが、本日 27 に戻っていたのです。

Counter

不正アクセス?とも一瞬思いましたが、大抵そんなはずはなく、カウンターにそもそも不具合があった可能性が高いのではと考えています。カウンターの値はサーバーにあるテキストファイルに保存しているので、何らかの理由でそれが読めず、0 をカウントアップして書き込んでしまったので、リセットしたのではないかと推測できます。

ただ確証はありません。対策としては、同じ事態が起きたときに状況を把握できるようなログを残すこと、同じ問題を起こしにくくすることが挙げられます。

もうすっかり Ruby を忘れてしまっているので、思い出しながら直していこうと思います。ちょっと時間はかかるかもしれません。

(つづく)

関連項目

| | コメント (0)

2016/09/22

Ruby (2) アクセスカウンター

@homepage のサービスが9月29日で終了します。ホームページ本体は @nifty ホームページサービスへ移行済みだったのですが、アクセスカウンターは @homepage の cgi が手頃だったので使い続けていました。

そこで、アクセスカウンターを Ruby で作ることにしました。前回の hello を作ってからもう4年も経っているのですが、この hello 0.3 (Ajax版)をベースにアクセクカウンターを作りました。counter として公開します。

図2 アクセスカウンター
【図2 アクセスカウンター】

@homepage のアクセスカウンターは同じIPアドレスからのアクセスをカウントしないようになっていましたが、今回のものはリロードするたびにカウントアップします。

| | コメント (0) | トラックバック (0)

2012/10/02

フリーソフト紹介: Aptana Studio 3

Aptana Studio 3(アプタナ スタジオ スリー)は、Java と JavaScript の開発に使っていた IDE(アイデーイー:統合開発環境) Eclipse (エクリプス)をベースとした IDE です。

Java (ジャバ:プログラミング言語)の開発はできないのですが、HTML(エイチティーエムエル:ウェブの記述言語)、CSS(シーエスエス:ウェブのスタイル記述言語)やブラウザ上で利用できるプログラミング言語 JavaScript(ジャバスクリプト)、サーバー上で利用できるプログラミング言語 Ruby(ルビー)の開発ができます。

Aptana Studio 3

最近バージョンアップがあったらしく、アップデートしたところ、エディタが起動しなくなってしまいました。仕方が無いので、一旦アンインストールして、インストールし直したところ、ちゃんと動きました。現在の Aptana Studio 3 のバージョンは、3.2.2.201208201020 です。

Eclipse と同様、Pleiades(プレアデス)という日本語化するアドインがあるのですが、エラーメッセージが日本語になってしまうと、インターネットを検索してもなかなかヒットしないので、英語のまま使うことにしました。

ホームページの更新のとき、@niftyのマイキャビ ネットワークドライブ連携機能というのを長年使ってきたのですが、そのサービスが今年の8/20に終わってしまいました。それ以降、コマンドプロンプトの FTP コマンドを使ってファイルをサーバーにアップロードしていたのですが、Aptana Studio 3 にファイルのアップロード機能があるので、今後はこちらを使うことになると思います。

| | コメント (0) | トラックバック (0)

2012/05/25

Ruby (1) Ruby にチャレンジ

JavaScript の連載と並行して、Ruby の連載「Ruby で楽しくサーバープログラミング」を始めることにしました。

クライアント側の処理は JavaScript でやっていくとして、囲碁の AI は JavaScript では無理そうだ、ということで、サーバーの CGI について調べました。当面、@nifty のホームページサービスの範囲[註]でやっていくことにしたので、スクリプト言語の選択肢は3つ。Perl、PHP、Ruby です。以前、Perl は少し使ったことがあるのですが、PHP と Ruby は全く使ったことはありませんでした。それでも、どうやら Ruby は面白そうだ、という気配を感じたので、Ruby を使ってみることにしました。

いずれ紹介することになると思いますが、例えば Ruby では、演算子のオーバーライドができます。Java や JavaScript では、2進ベクトルの論理和は a.or(b) と記述しましたが、Ruby では a | b と書くことができます。グラフ理論による囲碁の AI を記述するには、Ruby のほうがより向いているかもしれません。

Ruby という言語がプログラミングを楽しくできるように設計されているらしいので、これまで SmallBasic、Java、JavaScript で作ったものをまた Ruby に書き換えるときに、こんな書き方ができるのか、という楽しみがあるのではないかと考えています。

Ruby もまたオブジェクト指向言語なのですが、今回はクラスは使わず、手続きのみを使って、いわゆる Hello プログラムを作りました。hello として公開します。
図1 Hello
【図1 Hello】

参考資料は、『JavaScript本格入門』の Ajax の説明のところです。この本では PHP を使っていましたが、Ruby に書き換えてあります。Ruby にも ERB という機能があり、PHP のように HTML にコードを埋め込めるのですが、@nifty では ERB が使えないようなので、Ruby のメソッド IO.puts で HTML を出力するようになっています。

クライアントとサーバーで、どう分担するか、を考える第一歩として、3つの Hello プログラムを作りました。Ajax をうまく使ってクライアントとサーバーで非同期処理ができるのが、理想かなというのが現在の結論です。

これらのプログラムを作る際には、主に2つのサーバーエラーが起きました。

1つは、500 サーバー内部エラーです。Ruby プログラムに誤りがあるとこのエラーが出ます。もう1つは、403 実行が拒否されましたというエラーです。これは ftp でアップロードした Ruby のファイルが実行可能になっていないためで、コマンドプロンプトの ftp コマンドで、例えば、

quote site chmod 755 hello01.rb

と設定して、解決しました。

なお、今のところ統合開発環境として、JavaScript で導入した、Aptana Studio 3 を使っていますが、サーバーの設定方法がよく分からないので、サーバーとして Apache 2.2 をインストールし結果の確認をしています。

今後は、クライアントは JavaScript 、サーバーは Ruby で開発していく予定で、連載は並行していくつもりです。

[註] @nifty では現在 CGI の実行に関して以下の制限があります。この範囲を越えないように進めていく予定ですが、いかんともしがたい状況になった場合は、他のサーバーを検討します。

CPUの連続使用時間 : 30秒
CGIの経過時間   : 60秒

(つづく)

| | コメント (0) | トラックバック (0)