カテゴリー : 2014年 10月

[Mongoose] TypeError: Cannot read property ‘options’ of undefined

Mongoose でスキーマ定義に type: ObjectId としている field にオブジェクト型のデータが入ってると TypeError: Cannot read property ‘options’ of undefined エラーが発生します。

TypeError: Cannot read property 'options' of undefined
  at ObjectId.cast (/u/apps/com/shared/node_modules/mongoose/lib/schema/objectid.js:99:22)
  at /u/apps/com/shared/node_modules/mongoose/lib/document.js:288:29
  at model.Document.$__try (/u/apps/com/shared/node_modules/mongoose/lib/document.js:769:8)
  at init (/u/apps/com/shared/node_modules/mongoose/lib/document.js:287:16)
  at model.Document.init (/u/apps/com/shared/node_modules/mongoose/lib/document.js:246:3)
  at completeOne (/u/apps/com/shared/node_modules/mongoose/lib/query.js:1392:10)
  at Promise.<anonymous> (/u/apps/com/shared/node_modules/mongoose/lib/query.js:1160:11)
  at Promise.<anonymous> (/u/apps/com/shared/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
  at Promise.EventEmitter.emit (events.js:95:17)
  at Promise.emit (/u/apps/com/shared/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
  at Promise.fulfill (/u/apps/com/shared/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
  at Promise.resolve (/u/apps/com/shared/node_modules/mongoose/lib/promise.js:114:23)
  at /u/apps/com/shared/node_modules/mongoose/lib/model.js:2029:23
  at process._tickCallback (node.js:415:13)

再現手順ですが、例えば下記のようなスキーマ定義で、

Article = new Schema
  user:
    type: ObjectId
    ref: 'User'

user filed に ObjectId ではなく { name : ‘hoge’ } のような値を入れて、save するとエラーが発生します。

article = new Article
article.user = { name : 'hoge' } // ObjectId じゃない!
article.save()->

findAndModify などの Mongo DB Native NodeJS Driver を直接呼ぶメソッド findOneAndUpdate メソッドを使ったり、mongo shell で直接データを編集したりするとこういうエンバグさせてしまうので、必要ない限りやめたいですね。


参考情報

findOneAndUpdate – Mongoose API v3.8.18

findAndModify — MongoDB Manual 2.6.4

[Nagios] check_load での load average (ロードアベレージ) のチェックの設定変更

load average が跳ね上がることが増えてきたので、Nagios の check_load コマンドの設定を変更しました。

check_load のデフォルト値

define service{
        use                             generic-service
        host_name                       hoge
        service_description             LOAD
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        notification_interval           240
        notification_period             24x7
        notification_options            c,r
        check_command                   check_load!1,1,1!2,2,2
        contact_groups                  linux-admins
}

max_check_attempts を 3 回から 2 回に、normal_check_interval を 5 分から 3 分に変更しました。

check_load の設定変更後の値

define service{
        use                             generic-service
        host_name                       hoge
        service_description             LOAD
        max_check_attempts              2
        normal_check_interval           3
        retry_check_interval            1
        check_command                   check_load!1,1,1!2,2,2
}

チェック間隔を短くしたので、サーバが悲鳴をあげる前に対応できるようになるはず。


参考情報

Nagios/プラグイン/check_load – cubic9.com

テンプレートベースオブジェクトデータ設定ファイルオプション

[MongoDB] mongo shell での表示件数は DBQuery.shellBatchSize で設定できる

mongo shell での表示件数はデフォルト 20 件なのですが、これを変更するには DBQuery.shellBatchSize の値を変更すればいいみたいです。

MongoDB

続きを読む

MongoDB 用 GUI クライアント

MongoDB を mongo shell からでなく GUI クライアントから操作できた方が楽なこともあると聞いて、アプリ入れてみました。

MongoDB

続きを読む

[MongoDB] 特定のテキストフィールドが x 文字以上の document を取得する query

MongoDB で特定のテキストフィールドが x 文字以上の document を取得する query をご紹介します。

MongoDB

続きを読む

[RVM] Empty path passed to certificates update, functions stack: requirements_osx_update_openssl_cert_run …

rvm で Ruby version 2.1.3 をインストールすると Empty path passed to certificates update 的なエラーが発生しました。

% rvm install 2.1.3
 
Searching for binary rubies, this might take some time.
Found remote file https://rubies.travis-ci.org/osx/10.9/x86_64/ruby-2.1.3.tar.bz2
Checking requirements for osx_brew.
Certificates in '/usr/local/etc/openssl/cert.pem' are already up to date.
Requirements installation successful.
ruby-2.1.3 - #configure
ruby-2.1.3 - #download
ruby-2.1.3 - #validate archive
ruby-2.1.3 - #extract
ruby-2.1.3 - #validate binary
ruby-2.1.3 - #setup
ruby-2.1.3 - #gemset created /Users/bakorer/.rvm/gems/ruby-2.1.3@global
ruby-2.1.3 - #importing gemset /Users/bakorer/.rvm/gemsets/global.gems......................................................................
ruby-2.1.3 - #generating global wrappers..............
ruby-2.1.3 - #gemset created /Users/bakorer/.rvm/gems/ruby-2.1.3
ruby-2.1.3 - #importing gemsetfile /Users/bakorer/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.1.3 - #generating default wrappers..............
/Users/bakorer/.rvm/scripts/functions/support: line 490: 56810 Trace/BPT trap: 5       "$ruby_path" -rrbconfig -e '\
    File.open("'"$config_path"'","w") { |file|
      RbConfig::CONFIG.sort.each{|key,value|
        file.write("#{key.gsub(/\.|-/,"_")}=\"#{value.gsub("$","\\$")}\"\n")
      }
    }
  ' > /dev/null 2>&1
Empty path passed to certificates update, functions stack: requirements_osx_update_openssl_cert_run rvm_requiremnts_fail_or_run_action __rvm_osx_ssl_certs_ensure_for_ruby __rvm_osx_ssl_certs_ensure_for_ruby_except_jruby external_import_setup external_import main

Ruby 2.1.3 を使おうとすると dyld: Library not loaded: /usr/local/lib/libgmp.10.dylib という libgmp が読み込めないというメッセージが表示されてしまいます。

% rvm use 2.1.3
 
Using /Users/bakorer/.rvm/gems/ruby-2.1.3
dyld: Library not loaded: /usr/local/lib/libgmp.10.dylib
  Referenced from: /Users/bakorer/.rvm/rubies/ruby-2.1.3/bin/ruby
  Reason: Incompatible library version: ruby requires version 13.0.0 or later, but libgmp.10.dylib provides version 12.0.0

下記のように disable-binary フラグを付けて再インストールをすると直るようです。

% rvm reinstall 2.1.3 --disable-binary
 
ruby-2.1.3 - #removing rubies/ruby-2.1.3 - please wait
Checking requirements for osx_brew.
Certificates in '/usr/local/etc/openssl/cert.pem' are already up to date.
Requirements installation successful.
Installing Ruby from source to: /Users/bakorer/.rvm/rubies/ruby-2.1.3, this may take a while depending on your cpu(s)...
ruby-2.1.3 - #downloading ruby-2.1.3, this may take a while depending on your connection...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11.4M  100 11.4M    0     0  5118k      0  0:00:02  0:00:02 --:--:-- 5118k
ruby-2.1.3 - #extracting ruby-2.1.3 to /Users/bakorer/.rvm/src/ruby-2.1.3 - please wait
ruby-2.1.3 - #configuring - please wait
ruby-2.1.3 - #post-configuration - please wait
ruby-2.1.3 - #compiling - please wait
ruby-2.1.3 - #installing - please wait
ruby-2.1.3 - #making binaries executable - please wait
Rubygems 2.2.2 already available in installed ruby, skipping installation, use --force to reinstall.
ruby-2.1.3 - #gemset created /Users/bakorer/.rvm/gems/ruby-2.1.3@global
ruby-2.1.3 - #importing gemset /Users/bakorer/.rvm/gemsets/global.gems - please wait
ruby-2.1.3 - #generating global wrappers - please wait
ruby-2.1.3 - #gemset created /Users/bakorer/.rvm/gems/ruby-2.1.3
ruby-2.1.3 - #importing gemsetfile /Users/bakorer/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.1.3 - #generating default wrappers - please wait
ruby-2.1.3 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.1.3 - #complete 
Ruby was built without documentation, to build it run: rvm docs generate-ri
Making gemset ruby-2.1.3 pristine - please wait
Making gemset ruby-2.1.3@global pristine - please wait

以上です。


参考情報

osx – Error when installing Ruby 2.1.3 with RVM – Stack Overflow

[Redis] 特定の文字列を含む key の値を全て取得するコマンド

Redis で、特定の文字列を含む key の値を全て取得するコマンドをメモ

redis-cli KEYS "prefix*" | xargs redis-cli MGET

参考情報

How does it feel?: redisで特定の条件にマッチするkeyを削除する

[JavaScript] merge recursive なメソッド

JavaScript で merge recursive なメソッドは lodash.merge を使うのが良さそう。

_.merge – Lo-Dash documentation

説明とかはここには書かないので、参考情報を読むといいですよ。


参考情報

underscore.jsだと再帰的にマージできないのでlodashを使う – Labo Memo

Zendesk 宛に送信するメールの from は Zendesk で利用している以外のメールアドレスを使う

Zendesk 宛に送信するメールの from は Zendesk で利用している以外のメールアドレスを使う必要があるそうです。

Managing suspended tickets and spam – Zendesk Support

そうしないと、一時停止中のチケットとして扱われるようで、上記リンク先ページの Cause of suspension descriptions の項目にメッセージとその理由が書かれています。

今回の理由はこちら。

Received from Support Address

The email was sent by (not forwarded from) one of your support addresses. For information about support addresses, see Adding support addresses for users to submit support requests.

Zendesk から送信するメールの from アドレスとして使っているメールアドレスから送信されたメールは、一時停止中のチケットになってしまうみたいです。

[MongoDB] MongoError: Runner error: Overflow sort stage buffered data usage of x bytes exceeds internal limit of 33554432 bytes

Express (Node.js) + Mongoose (MongoDB) なアプリケーションで下記のような MongoError: Runner error: Overflow sort stage buffered data usage of 33555427 bytes exceeds internal limit of 33554432 bytes エラーが発生しました。

MongoDB

続きを読む