我一直试图找到一种合理的方法来测试使用流的代码.有没有人找到合理的方法/框架来帮助测试在nodejs中使用流的代码?
例如:
var fs = require('fs'),
request = require('request');
module.exports = function (url, path, callback) {
request(url)
.pipe(fs.createWriteStream(path))
.on('finish', function () {
callback();
});
};
Run Code Online (Sandbox Code Playgroud)
我目前测试这种类型代码的方法或者包括使用流来简化代码,以至于我可以将它抽象为未经测试的代码块,或者通过编写类似这样的代码:
var rewire = require('rewire'),
download = rewire('../lib/download'),
stream = require('stream'),
util = require('util');
describe('download', function () {
it('should download a url', function (done) {
var fakeRequest, fakeFs, FakeStream;
FakeStream = function () {
stream.Writable.call(this);
};
util.inherits(FakeStream, stream.Writable);
FakeStream.prototype._write = function (data, encoding, cb) {
expect(data.toString()).toEqual("hello world")
cb();
};
fakeRequest = function (url) {
var …
Run Code Online (Sandbox Code Playgroud) 在Go中,以下工作(注意一个地图的使用有一个返回,另一个有两个返回)
package main
import "fmt"
var someMap = map[string]string { "some key": "hello" }
func main() {
if value, ok := someMap["some key"]; ok {
fmt.Println(value)
}
value := someMap["some key"]
fmt.Println(value)
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何用自己的功能做同样的事情.是否有可能与可选的返回类似的行为map
?
例如:
package main
import "fmt"
func Hello() (string, bool) {
return "hello", true
}
func main() {
if value, ok := Hello(); ok {
fmt.Println(value)
}
value := Hello()
fmt.Println(value)
}
Run Code Online (Sandbox Code Playgroud)
不会编译(由于错误multiple-value Hello() in single-value context
)...有没有办法使这个语法适用于该函数Hello()
?
任何人都可以了解GitHub在使用Resque时如何处理Redis服务器的潜在故障或暂时不可用?
还有其他一些似乎已经将半复杂的解决方案放在一起作为使用zookeeper的redis-cluster的保留(请参阅https://github.com/ryanlecompte/redis_failover和解决方案for resque failover redis).其他人似乎有"糟糕的故障转移",在第一次看到连接问题时将奴隶切换到主设备而没有redis客户端之间的协调(但这在临时不可用情况下似乎有问题).
问题:Defunkt曾经谈过GitHub如何处理Redis失败?是否存在不涉及zookeeper的故障转移的最佳实践?
关于resis的原始帖子说明Redis的选择理性的一部分是redis的主从功能,但该帖没有描述GitHub如何利用这一点,因为所有工作者都需要对Redis的读写访问权限(参见https: //github.com/blog/542-introducing-resque).
使用ruby + webrick + sinatra时,'开发模式'的概念来自哪里?
require 'sinatra'
require 'sinatra/reloader'
get '/test' do
development?.to_s
end
Run Code Online (Sandbox Code Playgroud)
当我通过'ruby test.rb -p 3000'运行上述应用时,http:// localhost:3000/test返回"true"...但为什么它会返回true?开发模式是ruby,webrick,rack还是sinatra概念?此外,此功能是否记录在任何地方,特别是以非特定于轨道的方式?我发现很多人都参考了开发模式的概念,但我一直惊讶于找到相关信息的难度......也许我只是没有谷歌正确的关键词......
我目前正在尝试运行'bundle install'来使用Gemfile安装基于git的gem,因此使用ruby/other ruby命令而不使用最新版本的RVM(1.14.3).
我相信问题的原因是bundler将git gem安装到.rvm/gems/ruby-1.9.3-p194 @ something/bundler/gems中,而所有其他gem都安装到.rvm/gems/ruby-1.9中. 3-P194 @东西/宝石.因此,'捆绑列表'显示了宝石,但'宝石列表'没有.
这有什么想法?我真的不想使用bundle来执行所有操作.
以下服务器代码:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
file, _, err := r.FormFile("file")
if err != nil {
fmt.Fprintln(w, err)
return
}
defer file.Close()
return
}
func main() {
http.ListenAndServe(":8081", http.HandlerFunc(handler))
}
Run Code Online (Sandbox Code Playgroud)
正在运行然后调用它:
curl -i -F "file=@./large-file" --form hello=world http://localhost:8081/
Run Code Online (Sandbox Code Playgroud)
在large-file
darwin/amd64和linux/amd64的Go 1.4.2中,大约80MB似乎有某种形式的内存泄漏.
当我连接时pprof
,我看到bytes.makeSlice
在调用服务几次后使用96MB内存(最终r.FormFile
在上面的代码中调用).
如果我一直打电话curl
,这个过程的内存使用量会随着时间的推移而变慢,最终看起来在我的机器上大约300MB.
思考?我认为这不是预料/我做错了什么?
有谁知道AWS ELB如何在幕后工作?在我的ELB域名上运行nslookup,我得到4个唯一的IP地址.如果我的ELB启用了SSL,AWS是否可以与其他启用SSL的ELB(不一定归我所有)共享这些相同的IP?
据我了解,Web请求中的主机名是在https请求的加密Web请求中.如果是这种情况,AWS是否必须为每个启用SSL的ELB提供从未与其他任何人的SSL ELB实例共享的唯一IP地址?换句话说,AWS是否为您要求的每个SSL ELB提供4个唯一的IP地址?