カテゴリー : 2015年 7月

[Handlebars.js] registerHelper で独自のヘルパーメソッドを登録する

Handlebars.js は registerHelper を使って、独自のヘルパーメソッドを登録することができます。

例えば、テンプレートで encodeURIComponent メソッドを使いたいときは、

Handlebars.registerHelper('encodeURIComponent', encodeURIComponent);

という風にヘルパーを登録して、

<p>{{encodeURIComponent 'http://tryhandlebarsjs.com/'}}</p>

とテンプレートに書けば、

<p>http%3A%2F%2Ftryhandlebarsjs.com%2F</p>

というような HTML が出力されます。

ヘルパーが不要になったら、

Handlebars.unregisterHelper('encodeURIComponent');

で割り当て解除できます。


参考情報

[MongoDB] db.runCommand( { cloneCollection } ) の使い方

MongoDB で collection をコピーする db.runCommand( { cloneCollection } ) の使い方をメモ。

host: targethost1, port: 27017 と host: currenthost, port: 27018 で mongod instance が2つ立ち上がっている状態とします。

以下のようなクエリで targethost1:27017 の targetDb database にある users collection から verified_at が null ではない document を currentDb に同じ collection 名でコピーできます。

mongo --host currenthost --port 27018 currentDb
 
var query = { verified_at : { $ne : null } };
db.runCommand( { cloneCollection: 'targetDb.users', from: 'targethost1:27017', query : query } );

コピーした collection 名を変更したい場合は renameCollection でできます。

以上です。

[WordPress] XML-RPC を無効にする

WordPress の XML-RPC を DoS 攻撃に悪用されることを知ったので、Nginx の設定を変更して XML-RPC を無効にしました。

/etc/nginx/conf.d/codenote.com.conf

server {
    # deny xmlrpc
    location = /xmlrpc.php {
        deny all;
    }

XML-RPC を無効にすると Nginx の error.log には下記のようなログが出力されます。

2015/07/12 21:49:31 [error] 11605#0: *815037 access forbidden by rule, client: 123.123.123.123, 
server: codenote.net, request: "POST /xmlrpc.php HTTP/1.1", host: "codenote.net"

以上です。


参考情報

さくらのクラウドでサーバ作成するまでの参考リンク集

先月、さくらのクラウドでサーバを借りて、さくらのVPSからサーバ移行しました。

そのときに参考なった公式サイトのリンクをまとめておきます。

「さくらのクラウド」のコントロールパネルのマニュアル一覧ページ

さくらのクラウドに登録して、まず適当にアカウントを作成します。個人で使うので1アカウントだけ作りました。

そして、価格の安い石狩リージョンで最小構成でサーバ作成しました。

サーバ作成するときに OS やディスクの作成もまとめてやります。何もしないとサーバ作成直後は root で ssh 接続できてしまうので、サーバ作成時に SSH 公開鍵を設定しておくと安心ですね。

ざっとこんな流れで、さくらのクラウドに登録 〜 サーバ作成まで行いました。

[Node.js] Mongoose の virtual attributes を sinon で stub 化する

Mongoose の virtual attributes を sinon で stub 化する方法をご紹介します。

まず、下記のような Product model が定義されているとします。

# define Mongoose Product model
mongoose = require 'mongoose'
 
productSchema = new mongoose.Schema({
  # something
})
 
productSchema.virtual('discountPercentage').get ()->
  # calculate discountPercentage
  return discountPercentage
 
Product = mongoose.model 'Product', productSchema

そして、テストコードで discountPercentage virtual をスタブ化するコードは下記のような感じです。

# in test code
sinon = require 'sinon'
 
product = new Product()
 
console.log product.discountPercentage
# discountPercentage virtual の計算結果を返す
 
stub = sinon.stub product, 'get'
stub.withArgs('discountPercentage').returns 50
 
console.log product.discountPercentage
# 必ず 50 を返す
 
# 使い終わったら、忘れずに restore しましょう
stub.restore()

ポイントは sinon.stub mongooseInstance, ‘get’stub.withArgs(‘virtualName’).returns の部分で virtualName の返り値をスタブ化しているという点だけです。


参考情報