忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 01:58 】 |
サーバプログラムで使ったperl技

http



use LWP::Simple;
my $data = get('http://www.xxx.com');

なんとこの2行だけで取れてしまう。簡単過ぎ。

POSTで取りたいとか、タイムアウト設定したいとかなら

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent('xxx');
$ua->timeout(5);
my $data = $ua->post('http://www.xxx.com');
if ($data->is_success) {
print $data->content;
}
となる


文字コード



use utf8;
と書くと、plファイル内がutf8と仮定されるらしい。
文字列をutf8にエンコードしたいなら、

use Encode (encode_utf8);
$utf8_str = encode_utf8(src_str);

とする。



日付



use Time::Piece;

日付文字列の解析
$t = Time::Piece->strptime($date_str, '%Y-%m-%dT%H:%M:%S+09:00');
みたいにすると取れる。あとは
$t->year
$t->mon
$t->epoch(1970年1月1日からの秒数)
とかご自由に。



PR
【2013/02/02 19:50 】 | サーバ | 有り難いご意見(0)
DB使う
mysql入れてみる。

参考にしたページhttp://thinkit.co.jp/free/article/0707/5/1/

ストレージエンジンが選べる。確かに
MyISAM(トランザクション非サポート)
InnoDB(トランザクション機能サポート)
MEMORY(オンメモリデータベース)
NDB(クラスタ機能)

ページにはいろいろ書いてあるけど、よくわかんないのでとりあえずyum
% sudo yum install mysql
成功したっぽいメッセージがプロンプトに出る。

% mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

…エラーが出た。どうやら、mysqlサーバに接続できないとか。
どういうこっちゃ。
調べてみたけど古い情報多い。yum mysqlで調べてみると見つけたコマンド

% yum -y install mysql-server
というのがある。別なのか。sudoつけてやってみた。
これまた成功したっぽい。
もう一度試してみる

% mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

おお、見慣れたいつものプロンプト。

結局

% sudo yum install mysql
% sudo yum -y install mysql-server

これだけで使えるようになった。

で、もう普段のように書ける。

mysql> create table ...なんちゃら

しかし、CREATE DATABASE ができない。権限の設定をちゃんとしていないせいか
ひとまずおいといて、最初からあったtestデータベース内で作業してみる


とりあえずcreate table.
CREATE TABLE user(
id int unsigned not null
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
とか。

打つのは面倒だし、一度書いた物が喪われるのは大変なので、ファイルに書いておく。
(実は mysql> show create table table_name; でCREATE文が出力されるけど)

適当なddlファイルを作って

use test;
DROP TABLE IF EXISTS user;
CREATE TABLE user ...

と書いて、
$ mysql < XXX.ddl
でOK.
でも、show create table文でいつでも取り出せるんだから、ddlを手書きする必要はないよね。
変更したいときも直接DBでalter文書いて、その度にshow create tableでddlに出力、の形の方がいい。

次は、perlから使ってみる。
有名だからとりあえずDBIを使う。
参考にしたページhttp://tech.bayashi.net/pdmemo/perl_dbi_mysql.html

$ sudo perl -MCPAN -e 'install DBI'


#! /usr/bin/perl
use strict;
use DBI;

my $data_source = "DBI:mysql:test";
my $dbh = DBI->connect($data_source);

my $create_table = <<"SQL";
create table book(
id int unsigned not null,
author varchar(64) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL
$dbh->do($create_table);

$dbh->disconnect();

と書いて実行してみると…
おお、確かにtestデータベース内にbookテーブルができている!


【2013/02/02 15:36 】 | サーバ | 有り難いご意見(0)
fcgiプログラム
CAPNからFCGIを取って来ておく。

/var/www/cgi-bin/ 以下のファイル.fcgiに以下のような感じで書く


my $request = FCGI::Request;

while ($request->Accept() >= 0) {
print "Content-type: text/plain; charset=utf8¥n¥n";
print "hello world";
}


と、ブラウザに「hello world」と表示される。
Content-type のprintは必須で、これがないと何も表示されない。これの前にprintしたものも表示されない。

当たり前だが、Content-typeをtext/htmlにしたら、html的に正しく書こう。htmlをtext/plainで表示したらタグとかもそのまま表示される。



URLの引数はどうやって取得する?
のかというと、
$ENV{REQUEST_URI}
$ENV{QUERY_STRING}
あたりに入っている。


Xslateも動かしてみた。
割と簡単。


あと、開発用のフォルダを/var/www/とは別の場所に持つようにした。

【2013/01/14 16:18 】 | サーバ | 有り難いご意見(0)
fcgid設定
fcgi動かさないとね。

使うのはmod_fcgid
参考にしたのはhttp://www.movabletype.jp/documentation/developer/server/fastcgi.html
ちなみにmod_fastcgiというものもあるが、これは長時間運用で不安定になるとか書いてある

まずCPANモジュール
$ cpan FCGI
$ cpan CGI

次にCGIライブラリ。基本的に書いてあった通り
$ wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
$ tar zxvf fcgi-2.4.0.tar.gz -C /usr/local/src
$ cd /usr/local/src/fcgi-2.4.0
$ ./configure
$ make
$ make install

次にmod_fcgid。yumを使ってみた
$ yum install mod_fcgid
これで普通にできた…のかな?

モジュールは
/usr/lib64/httpd/module
に置かれる

設定ファイルは
/etc/httpd/conf/
/etc/httpd/conf.d/

conf/httpd.confには、ロードするモジュールの設定とかがたくさん書いてある。

LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
その中にmod_fcgid.soが追加されていることを確認する。なければ自分で書く

また、他のconfをインクルードしている
Include conf.d/*.conf

ついでに記述
ScriptAlias /fcgi/ /home/XXX/conf # なんか効かないっぽい

conf.d/fcgid.conf にfcgidの設定(タイムアウトとか)を書く(コピペ)。
あるいは、conf.d/fcgid.conf.rpmnew が自動的に作られているので、そっちを読み込むようにする。
conf/httpd.conf の中に
Include conf.d/*.conf.rpmnew
とでも追記しておく。
設定を反映してapache再起動
$ service httpd restart


===========================

結局、必要な設定のつながりは

fcgidモジュールのロード
LoadModule fcgid_module modules_mod_fcgid.so
特定の拡張子をfcgidに紐付け
AddHandler fcgid_script fcg fcgi fpl # cgiも入れた方が?

conf/httpd.conf
conf.d/mod_fcgid.conf
conf.d/mod_fcgid.conf.rpmnew
どこに書いてもいいけど。httpd.confに直接書かないなら、インクルード文を代わりに書くこと
Include conf.d/*.conf とか

fcgiスクリプトは、
/var/www/cgi-bin/
以下に置くこと。これで、ブラウザから
XXXX/fcgi-bin/*.fcgi
で実行できる。

ScriptAlias /fcgi/ /home/XXX/conf
を書いたら、その場所のfcgiを見るはずなんだが、なぜかそうならない
404Forbiddenが出る。
<Directory>タグ内でOptionsとか書いたんだけどできない。やっぱり cgi-bin/以下のファイルをcgi-bin以下のURLで表示しちゃう。他にも設定が必要なのか
DocumentRootも変わる?


=========================
もしうまく行かないときはこの辺を参照
http://www.umin.ac.jp/hp-coordinator/man/err_cgi.html
http://www.jitaku-server.net/apache_cgi_trouble.html


【2013/01/12 14:56 】 | サーバ | 有り難いご意見(0)
apacheとfcgi
今回はOSはLinux。

その上で動かすWebサーバはApache。まあ定番だからね。httpdと言ったら大抵これのことらしい。
最近はlighttpdが流行っているとも聞くが…。fcgiを標準でサポートしているのが便利とか。

CGI=CommonGatewayInterface
Webサーバ(Apacheとか)と外部プログラム(PerlやCで書いたプログラム。掲示板機能とかゲームロジックとか)のインタフェース仕様のこと。
参考になったページhttp://www.scollabo.com/banban/cgi/index.html
/etc/services というファイルに、サービスごとにデフォルトのポート番号が全部書いてある。 sshは22,httpは80などなど…。


1.
昨日入れたapacheのバージョンは
Server version: Apache/2.2.23 (Unix)
Server built: Oct 21 2012 20:35:32

apacheのトップディレクトリは
/usr/lib64/httpd
らしい。(findして見つけた…)

2.
fcgiは当然必要だから、Apacheでmod_fastcgiを入れる
参考にしたページhttp://kotaroito.hatenablog.com/entry/20101019/1287502443

適当に/usr/local/にfcgiというフォルダを作り、その下にmod_fastcgiをインストールした。
コンパイルして以下のモジュールが作られた。
/usr/lib64/httpd/module/mod_fastcgi.so

この作業の最中、makeをするためにgccが必要になったので
% sudo yum install gcc
とコマンド。

インストールしたディレクトリの中にある
README
INSTALL
とかファイルを読むのが大事。



【2013/01/04 17:57 】 | サーバ | 有り難いご意見(0)
perl環境設定
1.
linuxサーバなら、perlは最初から入っている
$ which perl
/usr/bin/perl

2.
CPANをいれる
$ sudo yum install cpan
CPAN自体はyumでいれるわけだ
さらに続けて
$ perl -MCPAN -e shell
> Would you like me to configure as much as possible automatically? [yes]
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
cpan[3]> q
とすると完了。これが何をしてるのかは分からん
参考http://cloudbb.jp/book1/Perl_Install.htm

3.
パッケージをいろいろ入れる…

まず、すでに持っているか確認
$ perl -e 'use List::Util'
何も表示されなければ持っている

$ perl -e 'use List::MoreUtils'
Can't locate List/MoreUtils.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
って言われたら持ってない。

で、CPANでインストール
$ sudo perl -MCPAN -e 'install List::MoreUtils'
…なんだけど、やってみたら、'YAML'や'make'が見つからないとか言われた。
まずはmakeをインストール
$ sudo yum install make
次いでYAML
$ sudo cpan YAML
ちなみに…「YAML(YAML Ain't Markup Language)とは、人間にとって読みやすいデータ直列化フォーマットである。」だって。http://d.hatena.ne.jp/keyword/YAML

そしたらcpanで取って来れるようになる。sudo忘れずに!(sudoじゃなくてもできる方法あるらしいけどhttp://iandeth.dyndns.org/mt/ian/archives/000623.html)
改めて
$ sudo perl -MCPAN -e 'install List::MoreUtils'
あるいは
$ sudo perl -MCPAN -e shell
cpan[1]> install List::MoreUtils
でもよい。
入ったか確認
$ perl -e 'use List::MoreUtils'
何も表示されなかったらOK。
【2013/01/03 16:54 】 | サーバ | 有り難いご意見(0)
AWS使う
1.
まずはamazonのアカウントを作る。買い物したことがあればそのアカウントでOK。ここは省略。

2.
AWS作るときはここが参考になった。
http://www.slideshare.net/satoshi1977/aws-ec2-20111124

セキュリティグループ作るところだけは、注意が必要で、
ポート22(SSH)とポート80(HTTP)を開いておくこと。
なお、そのインスタンスに適用するセキュリティグループは、別の物に変えられないので注意。(ただしセキュリティグループの内容自体を変えることはできる。)

3.
インスタンスを作って起動したら、SSHで接続しよう。
macのターミナルを開き、
% ssh -i XXX.pem ec2-user@XXXXX.compute.amazonaws.com
pemは、インスタンス作成時に作った秘密鍵ファイル。必ずchmod 400 を先にしておくこと。
ちゃんとポートを開いていれば、接続できますよ。できなければ、セキュリティグループを見直してみよう。

なお、毎回このsshコマンドを打つのは面倒なので、
~/.ssh/configに以下のように書いておく

Host aws
HostName XXXX.compute.amazonaws.com
IdentityFile ~/path/to/XXX.pem
User ec2-user
と、以下のコマンドを打てば接続できるようになる
% ssh aws

4.
Webサーバとして動かすために、以下のコマンドを打っていく
$ sudo yum update -y (-yは、たぶん途中プロンプトで聞かれるときに y (yes) で応えるっていうオプション)
$ sudo yum install httpd-devel -y
$ sudo service httpd start
$ sudo chkconfig httpd on
$ chkconfig --list httpd
2~5がonになっている

ちなみにyumはapt_getみたいなもん。
参考 http://d.hatena.ne.jp/inouetakuya/20111006/1317900802

5.
htmlを置いてみる。
場所は /var/www/html
root さんでしか書き込めないのでsudo使用。
適当にindex.htmlを作ってみると、ちゃんとブラウザから見える!(XXXXX.compute.amazonaws.com/index.html)
見えない人は、セキュリティグループを見直してみよう。ポート80開いてる?


【2013/01/03 16:26 】 | サーバ | 有り難いご意見(0)
LAMP
LAMP

Linux (OS)
Apache HTTP Server (Webサーバ)
MySQL (データベース)
Perl, PHP, Python (スクリプト言語)
の略。
動的ウェブコンテンツを含むウェブサイトの作成に適した、オープンソースのソフトウェア群のこと。
(Wikipediaから)


MacでLinusを動かす方法
VMware Fusionを使うらしい。インストールの方法が書いてある。
その2。OSを選択し、仮想HD割り当て。
その3。Ubuntuをインストールしている。

Apache
Wikipedia
商用から自宅サーバまで。
自宅サーバではNASをファイルサーバとして使うことが多い。また、httpsやsftpも使える。容量も自由でCGIやPHPなどサーバサイドコンテンツも好きなだけ使える。
NAS=Network Attached Storage。補助記憶装置であり、コンピュータ(コントローラ+ハードディスク)でもある。Wikipedia

【2012/03/10 21:46 】 | サーバ | 有り難いご意見(0)
<<前ページ | ホーム |