を使用してGoogleクラウドプラットフォームの「悪いコマンドライン形式」大きな値を持つには、多くの場合、その後の要求は、その後で満たされる応答Error: bad command line format
Memcacheの応答:例の修正Node.jsの
に大きな文字列の結果を格納するon the Google App Engine Documentationを見つけましたセット機能の何かが短時間サーバーをオフラインにするかのように、Error: Server at <IP>:11211 not available
GAEの共有Memcacheと、違いなく1GB(1秒あたり10,000 MCU)の専用メモリを試しました。
複数のnodejs memcachedライブラリと大きなバッファとJSONフォーマットの値は、すべて同じエラーを返します。私の研究では、このエラーは250文字以上の「キー」から来る傾向がありますが、大きな値からではありません(Memcacheのクォータと値ごとの1MiBの制限の両方には不十分です)。ここで
は、実証するための完全なapp.jsです:
'use strict';
var express = require('express');
var Memcached = require('memcached');
var app = express();
// The environment variables are automatically set by App Engine when running
// on GAE. When running locally, you should have a local instance of the
// memcached daemon running.
var memcachedAddr = process.env.MEMCACHE_PORT_11211_TCP_ADDR || 'localhost';
var memcachedPort = process.env.MEMCACHE_PORT_11211_TCP_PORT || '11211';
var memcached = new Memcached(memcachedAddr + ':' + memcachedPort);
app.get('/', function(req, res, next) {
memcached.get('foo', function(err, value) {
if (err) { return next(err); }
if (value) {
console.log('Exists');
return res.status(200).send('Value: ' + value);
}
var str = "";
// Make a big string
var loops = 1000;
// works with loops = 10, fails with loops = 1000
for(var i = 0; i < loops; i++){
str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
memcached.set('foo', str, 60, function(err) {
if (err) { return next(err); }
console.log('Created');
return res.redirect('/');
});
});
});
var server = app.listen(process.env.PORT || 8080, '0.0.0.0', function() {
console.log('App listening at http://%s:%s', server.address().address,
server.address().port);
console.log('Press Ctrl+C to quit.');
});
同じ大きな文字列を手動でGoogleクラウドコンソールのフォームを使用してMemcacheの中で設定することができます。値を取得するための後続の呼び出しも機能します。私は値の大きさに基づいてMCUを大幅に誤算していますか?
ローカルで実行しているとき(OSX)、問題は発生せず、非常に大きな値を格納できます。エラーはデプロイされたコードでのみ発生します。どんなアドバイスや指示も大変ありがとうございます。
修正プログラムはマージされており、次のリリースに含まれるはずです。 –
これを修正する必要があります。 –