缺少它:最近开始使用Gulp(从Grunt转换),并尝试使用Gulp的默认监视任务(不是npm的gulp-watch)用于SASS/JS/HTML和gulp-nodemon(从npm)重启Express服务器发生变化.当跑步时gulp watch,它工作正常; 当运行gulp server(对于nodemon)工作正常.但是,将两者结合使用(如下面的默认任务配置所示),手表内容无法正常工作.任务正在运行,并且在CLI上gulp显示监视任务的"正在启动"和"已完成",但文件不会更新.
相关任务配置:
Concat javascript:
gulp.task('js:app', function(){
return gulp.src([
pathSource('js/application/modules/**/*.js'),
pathSource('js/application/_main.js')
])
.pipe(concat('application.js'))
.pipe(gulp.dest('./build/assets/js')).on('error', utils.log);
});
Run Code Online (Sandbox Code Playgroud)
Nodemon,重启更改以表达app:
gulp.task('express', function(){
return nodemon({script:'server.js', ext:'js', cwd: __dirname + '/express', legacyWatch: true})
.on('restart', function(){
//gulp.run('watch'); // doesn't work :(
});
});
Run Code Online (Sandbox Code Playgroud)
观看javascript更改,并运行js:app进行concat'ing.
gulp.task('watch', function(){
gulp.watch(pathSource('js/application/**/*.js'), ['js:app']);
});
Run Code Online (Sandbox Code Playgroud)
默认任务,同时初始化gulp watch和nodemon:
gulp.task('default', ['watch', 'express']);
Run Code Online (Sandbox Code Playgroud)
如果有人有任何想法,请提前感谢!
问题:Ruby(和/或Rails)中是否有一种简洁的方法将两个对象合并在一起?
具体来说,我正在尝试找出类似于jQuery $.extend()方法的东西,而传入的第一个对象将使其属性被第二个对象覆盖.
我正在使用Rails 3.2+中的无表格模型.发生表单提交时,提交中的参数用于动态填充User对象.该用户对象在使用Ruby的PStore类的页面请求之间保持不变,将对象编组为平面文件,以后可以轻松检索.
相关代码:
module Itc
class User
include ActiveModel::Validations
include ActiveModel::Conversion
include ActionView::Helpers
extend ActiveModel::Naming
def set_properties( properties = {} )
properties.each { |k, v|
class_eval("attr_reader :#{k.to_sym}")
self.instance_variable_set("@#{k}", v)
} unless properties.nil?
end
end
end
Run Code Online (Sandbox Code Playgroud)
创建用户对象的方式如下:
user = Itc.User.new( params[:user] )
user.save()
Run Code Online (Sandbox Code Playgroud)
save()上面的方法不是ActiveRecord的save方法,而是我写的一个通过PStore执行持久化的方法.
如果我加载了一个用户对象,并且我有一个表单提交,我想做这样的事情:
merged = existingUserObject.merge(User.new(params[:user])
Run Code Online (Sandbox Code Playgroud)
并且结果merged是用户对象,只更新表单提交中更改的属性.
如果有人对一般的更好的方法有任何想法,我会全力以赴.
用例
尝试配置(Docker Swarm或Consul)集群,其中首先在一个节点上初始化集群,该节点生成一些令牌,然后需要由加入集群的其他节点使用.关键是节点1和2不应该尝试加入集群,直到节点0生成了连接密钥.
例如.在节点0上,运行docker swarm init ...将返回一个连接令牌.然后在节点1和2上,您需要将该令牌传递给相同的命令,例如docker swarm init ${JOIN_TOKEN} ${NODE_0_IP_ADDRESS}:{SOME_PORT}.而魔术,你有一个整洁的小集群......
试图到目前为止
尝试使用安装的AWS SDK初始化所有节点,并在S3上存储来自节点0的连接密钥,然后在其他节点上获取该连接密钥.这是通过带有'remote-exec'配置程序的null_resource完成的.由于Terraform并行执行的方式,有一些类型条件,并且可预测节点1和2经常尝试从S3获取一个尚未存在的密钥(例如,节点0还没有完成它的东西).
尝试使用'local-exec'配置程序SSH到节点0并捕获其连接键输出.这种方法效果不佳,或者我这样做很糟糕.
我已经阅读了文档.并且堆栈溢出.和Github一样,这个问题确实很长.彻底.如果这已经在其他地方解决了,链接赞赏!
问题:
我正在尝试在 Digital Ocean 上构建一个 Docker Swarm 集群,由 3 个“管理器”节点和许多工作节点组成。工作节点的数量与这个问题并不是特别相关。我正在尝试对 Docker Swarm 配置内容进行模块化,因此它没有专门耦合到 digitalocean 提供程序,而是可以接收 IP 地址列表来对集群进行配置。
为了配置主节点,第一个节点需要进入集群模式,该模式会生成一个连接密钥,其他主节点将使用该连接密钥来加入第一个节点。“null_resource”用于针对主节点执行远程配置程序,但是,我无法弄清楚 dafuq 如何确保第一个主节点完成其工作(“docker swarm init ...”),然后再进行另一个“ null_resource”配置程序针对需要加入第一个主节点的其他主节点执行。它们都是并行运行的,可以预见的是,它不起作用。
此外,尝试找出如何收集第一个节点生成的加入令牌并将其提供给其他节点。我考虑过使用 Consul 来执行此操作,并将加入令牌存储为密钥,并在其他节点上获取该密钥 - 但这并不理想,因为...确保 Consul 集群已配置并准备就绪仍然存在问题(同样的问题)。
主.tf
variable "master_count" { default = 3 }
# master nodes
resource "digitalocean_droplet" "master_nodes" {
count = "${var.master_count}"
... etc, etc
}
module "docker_master" {
source = "./docker/master"
private_ip = "${digitalocean_droplet.master_nodes.*.ipv4_address_private}"
public_ip = "${digitalocean_droplet.master_nodes.*.ipv4_address}"
instances = "${var.master_count}"
}
Run Code Online (Sandbox Code Playgroud)
docker/master/main.tf
variable "instances" {}
variable "private_ip" { …Run Code Online (Sandbox Code Playgroud)