从架构看有一个重要组件 Gitaly。要执行 git 操作时,gitlab-shell 和 gitlab backend 都会和它通信。
嗯嗯。其实我是想了解一下远端版本管理仓库是如何实现的 ...
嗯。那只有从开发者文档看起了。
有没有 Gitlab 的源码分析可以推荐一下?
是 swagger2 吧?按 文档,就是改“consumes”呀 ...
You can use the consumes and produces keywords to specify the MIME types understood by your API.
或者说你还有别的意思?
?那把 yml 里中的媒体类型改掉不就是了
这是一个 swagger 文档的问题,还是通信的问题?
wow cool。感谢翻译。
楼主这思路简直是阶跃型的 ....
@nodes
是 ActiveRecord::Relation
对象,要取每个 node 的“字段”,应该是 map(&:video)
道友?
keys = %i[begin_integral end_integral] # ...
params.values_at(*keys).any?(&:present?)
以及如果下面这样也可以的话,更短:
keys = params.keys.grep(/begin|end|site_sn/)
params.values_at(*keys).any?(&:present?)
为什么不先搜索一下呢?
另外,这是「Guard Clause」,减少嵌套层次的一种重构方法,不是说把 if 写在同一行就简洁漂亮了...
return number if number < 2
凡是表现和代码不一致的,多半是 spring 一类导致的
试一下
task deploy: :remote_environment do
#
end
生日快乐
什么是「配置」?
Oh no ...
是否可以在 payload 加一个字段,放与密码相关的哈希,当用户重置密码后,之前的 token 就失效了。也不需要持久化 token。
我觉得也可行,简单的想法是在 setter 写入值的时候,按照前面设置的 @sign 实例变量的值存成不同名的实例变量,比如 @foo_1 和 @foo_2,分别是 sign 1 和 2 的配置值。大概这样:
config_class = Class.new do
attrs.each do |attr|
define_method attr do
attr.eql?(:sign) ? @sign : instance_variable_get("@#{attr}_#{@sign}")
end
define_method "#{attr}=" do |val|
attr.eql?(:sign) ? (@sign = val) : instance_variable_set("@#{attr}_#{@sign}", val)
end
end
配置的时候就可以:
config.sign = '1'
config.foo = 'foo1'
config.bar = 'bar1'
config.sign = '2'
config.foo = 'foo2'
config.bar = 'bar2'
使用:
MyConfig.config.sign = '1'
MyConfig.config.foo # => 'foo1'
手写的这一段,还没试过,可以参考一下 ... 不过我是觉得上面的 MyConfig.config_a
的用法更好,读某一套配置只需要一行。
再多写一点,可以继续把 sign 方法的名字可配置化,而不是硬编码。
这不都是同名的 key 吗,不知道你的 yml 文件是怎么配置?
「多套配置」是指:Cls.config_a.foo; Cls.config_b.foo
?如果是这个意思,那么我粗糙地实现了一下:
# configurable.rb
module Configurable
module Enable
cattr_accessor :current_config
def method_missing(method, *args)
cattr_accessor method
define_singleton_method method do
self.current_config = method
config = instance_variable_get("@#{current_config}_config")
config.nil? ? self : config
end
send method
end
end
def self.with(*attrs)
# 使用配置属性定义匿名类
config_class = Class.new do
attr_accessor *attrs
end
# 为可混入的类方法定义匿名模块
class_methods = Module.new do
define_method :config do
config_var = "@#{current_config}_config"
instance_variable_set(config_var, config_class.new) if instance_variable_get(config_var).nil?
instance_variable_get(config_var)
end
def configure
yield config
end
end
# 创建并返回新的模块
Module.new do
singleton_class.send :define_method, :included do |host_class|
host_class.extend class_methods
end
end
end
end
# my_config.rb
class MyConfig
extend Configurable::Enable
include Configurable.with :foo
end
# Usage
MyConfig.config_a.configure do |config|
config.foo = 'bar'
end
MyConfig.config_b.configure do |config|
config.foo = 'foo'
end
puts MyConfig.config_a.foo
puts MyConfig.config_b.foo