最新の投稿
Meteorでコメントがあったり、BBSで投稿があった場合サイトの管理者(ここでは私)はその事を知りたいと思いました。
そこで、投稿があったらメールで管理者に知らせる為にメール送信機能を組み込みました。
参考サイト Meteorで、メール送信
いつものようにパッケージを組み込む
meteor add email
そして server/mailserver.jsへ自分が使っているsmtpサーバの情報を入力する。
これはGmailの設定例です。
Meteor.startup(function () {
process.env.MAIL_URL="smtp://メールアドレス:パスワード@smtp.gmail.com:587";
});
このサイトで使ってるBBSの例
client/template/bbs/bbs.html
<template name="bbscomment">
<span id="labeltitle">お名前<input type="text" id="bbs_name" value="{{cookie_bbs_name}}"/></span>
<span id="labeltitle">パスワード<input type="password" id="bbs_password" value="{{cookie_bbs_password}}"/></span>
<textarea id="bbscomment_message" class="form-control" rows="6" placeholder="パスワードを入力すると自分のコメントを編集できます。マークダウン使えますが、htmlタグ制限があります 。Aboutを見て下さい。"></textarea>
<span id="labeltitle">{{randomtext}}</span> 左の数値を入力して下さい <input type="text" id="random_id" />
<hr />
<button id="btn_comment" class="btn btn-info">追加</button>
</template>
client/template/bbs/bbs.js
Template.bbs.events({
'click #btn_comment': function(event, template){
var md5str;
var randomst = String($('#random_id').val());
if(randomst !== String(Session.get('bbs_random_text'))) return;
var bbs_name = $('#bbs_name').val();
var bbs_password = $('#bbs_password').val();
var bbs_comment = $('#bbscomment_message').val();
var mid = Session.get('bbs_mid');
// パスワードが空白でなければ、 Crypt を使って Base64で暗号化
if(bbs_password !==''){
md5str = CryptoJS.MD5(bbs_password).toString(CryptoJS.enc.Base64);
} else {
md5str ='';
}
if(bbs_name==='' || bbs_comment==='') return;
//コメントのインサート
Meteor.call('bbsCommentInsert', mid, bbs_name, md5str, bbs_comment,
function(err, result){
if(!err){ // エラーがなければ
$('#random_id').val('');
$('#bbs_name').val('');
$('#bbs_password').val('');
$('#bbscomment_message').val('');
if(bbs_password !== '') {
// クッキーをサイトルートで一年間セット
Cookie.set('_cookie_bbs_name', bbs_name, {
path: '/',
expires: 365
});
Cookie.set('_cookie_bbs_password', bbs_password, {
path: '/',
expires: 365
});
};
// メールの送信はここから
var maintitle =NewMainBbs.findOne({mid:Session.get('bbs_mid')}).maintitle;
var to = 'kiyo@yosiki.org';
var from = 'kiyo@yosiki.org';
var subject = 'kiyoSite からメール';
var mes = maintitle +' '+bbs_name+ '様からコメントがありました。';
// Meteor server methodsのsendEmailをコール
Meteor.call('sendEmail', to, from, subject, mes,
function (err, result) {
if (err) {
console.log('メールの送信に失敗');
} else {
console.log('メール送信 完了');
}
});
server/server.js
Meteor.methods({
//メールの送信
'sendEmail': function(to, from, subject, text){
check([to, from, subject, text], [String]);
// 同じクライアントからの、ほかのメソッド呼び出しが
// メール送信完了を待つことなく実行が開始されるように
// 設定します。
this.unblock();
Email.send({
to: to,
from: from,
subject: subject,
text: text
});
}
});
起動スクリプトを調べていたら、 Upstart を使ってお手軽 daemon 化と言う方法があるようだ。
ルール
/etc/init/ に拡張子 .confにして保存する。
description "(説明を書く)"
author "(あなたの名前) <(メアド@ドメイン)>"
start on runlevel [(Run Level)]
stop on runlevel [(Run Level)]
expect fork (デーモンの場合は必要)
chdir (作業ディレクトリ)
exec (起動コマンド)
respawn (実行中のジョブが異常終了すると再実行するよう指定)
SysVinit(従来の)方法に比べて簡単で起動が早いらしい。
ubuntuでは Upstart方式に変えていく方針らしい。
実験してみた。
#kiyo-site nginx port:xxxx deamon
description "kiyo-site --- meteor deamon"
start on runlevel [2345]
stop on runlevel [!2345]
expect fork
respawn
chdir /usr/lib/bundle_kiyo
exec sh /usr/lib/bundle_kiyo/start.sh
$ sudo initctl reload-configuration
再起動
ちゃんと起動した。
起動スクリプトをぼちぼち覚えないとrc.localは廃止になるらしい。
練習を兼ねて VineLinux6.3 mongodb の起動スクリプトを作った。
参考にしたサイト
chkconfigを利用した起動スクリプトひな形
Linux起動の仕組みを理解しよう[rcスクリプト編]
VineSeed の mongodb 起動スクリプト(丸写しに近い)
mongodb の dbpath は前回作ったのを利用する。
まず /etc/mongodb.conf を VineSeedより拝借
#mongodb.conf
bind_ip = 127.0.0.1
port = 27017
fork = true
pidfilepath = /var/run/mongodb.pid
logpath = /var/log/mongod.log
dbpath = /data/db
journal = true
/etc/init.d/mongod これもVineSeedより拝借して理解できない所はなるべく使わないように少しだけ書きなおした。
#!/bin/sh
# chkconfig: 345 99 1
# description: mongod
# processname: mongod
# Source function library
. /etc/rc.d/init.d/functions
exec="/usr/local/bin/mongod"
prog="mongod"
pidfile="/var/run/mongodb.pid"
logfile="/var/log/mongodb.log"
options=" -f /etc/mongodb.conf"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile="/var/lock/subsys/mongod"
start() {
[ -x $exec ] || exit 5
echo -n "Starting mongod: "
LANG=C
daemon --pidfile=${pidfile} "$exec --quiet $options run >> $logfile 2>&1 &"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n "Stoping $prog: "
killproc -p ${pidfile} $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
$1
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac
exit $?
自分用覚書
# chkconfig: 345 99 1
これは/etc/inittabにある説明のように3,4,5の時起動する。
/etc/inittabの一部分
0は終了、1はシングルモード、3はマルチモード、5はグラフィックモード
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
以下2項目も必要なようだが、mongodの所はなんでもよいようだ。
# description: mongod
# processname: mongod
用意された functions をインクルードする。各ディストリビューションで違うので注意
# Source function library
. /etc/rc.d/init.d/functions
以下の項目は必要ではないかも知れない
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
.....
start() {
$exec にファイルが存在しないなら終了
[ -x $exec ] || exit 5
基本的に[ ] で括られている場合は if *** then のようだ。
LANG=C <-- mongodb 2.4.12を使ったので LANG=Cとしたが, 2.2.4だと要らないと思う
あとは
sudo chmod +x /etc/init.d/mongod
sudo chown -R root:root /data/db
sudo chkconfig --add mongod
sudo chkconfig mongod on
これで今のところ起動している。
一休みしてこのサイトの起動スクリプトも、、、
nodejsとnpmはapt-getでインストールし、npmでnode.jsをダウングレード で nodejs バージョン0.10.36にする。
mongodbをダウンロードする。
私はmongodb-linux-x86_64-2.2.4.tgz をダウンロードした。
なぜ古いバージョンをダウウンロードしたかと言うと export LC_ALL=C又はexport LANG=C としないと起動しなかった事とvineseedでは2.2が使われていた為。
解凍する
sudo cp ~/mongodb-linux-x86_64-2.2.4.tgz /usr/local/src
cd /usr/local/src
tar zxvf mongodb-x86_64-2.2.4.tgz
cp mongodb-x86_64-2.2.4/bin/* /usr/local/bin
データベースの格納用フォルダーを作成する
sudo mkdir -p /data/db
sudo chown `id -u` /data/db
起動用に/etc/rc.localへ記入
sudo vi /etc/rc.local
Vine stuff ends here
LANG=C
/usr/local/bin/mongod --fork --logpath=/var/log/mongod.log touch /var/lock/subsys/local
meteor のインストール
sudo apt-get install curl
curl https://install.meteor.com/ | sh
ターミナルから meteor create xxxxすると mongodbが起動できないとエラーがでる。
これは meteorが内部で使っているminimongodbの事である。export LANG=C とターミナルから入力するとOKだ
ターミナルから export LANG=Cと毎回打つのがメンドイので ~.bushrc へLANG=C等と書いてしまうと次回の起動時に英語表記になってしまいますので注意して下さい。
ま、面倒だけどなんとかデプロイも可能だしデプロイしたアプリはexport LANG=Cは要らないようなので公開サイトで使えそうです。
夏場に向けて新規PCへ交換する為、今月ちょっと中断します。
このPCは普通のディスクトップでファン等小さく夏場は危険な香りがします。
今度のPCは全面に2個大型ファンが付いているので交換したいのですが、仕事の関係で何時止めるかは
はっきり解りません。多分日曜とか夕方7時以降だと思います。
アクセスできない場合はPC交換をしてるのかなと思って下さい。
ではではよろしくお願いいたします。