• Singleton 是单例的意思,就是只初始化一个类成员instance,并始终使用它。

    来自 WIKI 的说明 (链接):

    单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

    你在上面的写法有误,因为实际并没有用到 Singleton,而是在调用类方法

    上面的写法等价于:

    class CoderA
      def self.work
        "crash at 996"
      end
    end
    
    class CoderB
      class << self
        def work
          "live at 955"
        end
      end
    end
    
    p CoderA.work
    p CoderB.work
    

    class << self 的写法其实只是让包含在此区块中的类方法在定义的时候省略self.

    正确的单例写法:

    require "singleton"
    
    class CoderA
      include Singleton
    
      def work
        "crash at 996"
      end
    end
    
    p CoderA.instance.work
    

    附文档: https://rubyapi.org/3.0/o/singleton

  • 这个结果对实际项目感觉没什么意义,毕竟线上项目可不是运行的 hello world 想像一下复杂的线上项目基于 rack,用纯净 ruby 编写,酸爽程度不论,其实还是要写出另一个不会比 rails 更好的框架来。

  • 关于 Rails 的多数据库事务 at 2021年09月03日

    试过,只 rollback 了触发错误的那个数据库连接的数据,没有 rollback 另一个数据库的数据

  • 我觉得很好看

  • 试试 alias_attribute

    class Person
        alias_attribute :nickname, :name
    end
    

    via: https://api.rubyonrails.org/classes/ActiveModel/AttributeMethods/ClassMethods.html

  • 目前的同步方案是用的 logstash

  • 用这个 gem 还需要建立 model,创建项目,挺重的。我只是想把数据全量导入 es

  • 谢谢回复,你说的似乎是要自己写代码来导入,请问有没有现成的工具?配置一下就可以进行导入。

  • 转换一下思路,用这种方法是不是也行?

    def handle(options={})
      str = options.fetch(:str, "hello world")
      list = options.fetch(:list, [])
    
      return str unless str.nil?
      return list..map {|e| e += 1} unless list.nil?
    end
    
    handle(str: 'hello ruby')
    handle(list: [1,2,3])
    
  • /usr/local/opt/openssl/lib/ 这个目录下面看看有没有安装 openssl,如果没有安装,就执行 brew install openssl

    如果安装了,就看一下目录下面应该有最新版本的 libssl.1.0.0.dylib, 例如我这里最新版栮是: libssl.1.1.1h.dylib

    然后将最新版本的这个文件做一个符号链接: ln -s libssl.1.1.1h.dylib libssl.1.0.0.dylib

    可能这个目录里的其他几个文件也需要做,可以根据错误提示做上就好了。

  • 请问有没有与 microk8s 做一下对比? 想知道真实场景中两者的优缺点

  • 可以试试用 config.assets.prefix 为静态资源配置前缀

  • 反馈下发现的 2 个小问题 at 2020年07月07日

    @huacnlee 我在 firefox 下发贴出现问题,在发贴界面,选择节点时,点击节点名就直接跳转到节点话题索引页了,没办法发布新话题

  • Gem 本身就是设计用来做静态配置项的,建议动静态分开,如果有动态的需求,我是自己另外做功能放这些配置。

  • 输出信息里有写,你的 application.js 文件超出了推荐大小

    建议先检查一下里面用了什么第三方库,会占用这么大文件。

  • 这个方法解决了我的问题,感谢。

  • 大多数程序员选择语言也只是选择一个生态和稳定的吃饭工具,有多少本身很喜欢 ruby 的同学在被迫写其他语言。

    一直在关注 @nightire,前段时间看到新出了一期 emberjs 的视频,对 emberjs 挺有兴趣,希望能够继续更新。

    也希望能够谈谈最近 emberjs 的近况,感谢。

  • 可以试试

    let plupload = require('plupload/plupload');
    

    这个项目几年没更新了,建议找别的库替换

  • 确实是使用方法的问题,在 Graphql 里应该调用 BatchLoader::GraphQL.for 现在可以了,非常感谢。

    BatchLoader::GraphQL.for(object.id).batch(default_value: []) do |post_ids, loader|
      Image.where(post_id: post_ids).each { |i| loader.call(i.post_id, i) }
    end
    
  • 谢谢回复,我试了一下这个 gem, 在我的 PostType 里面,当objectSearchkick::HashWrapper的实例的时候 (searchkick 搜索结果),batchloader 没有起作用,每条 post 还是单独 select 它的所有图片。

    相关代码:

    # demo_schema.rb
    class DemoSchema < GraphQL::Schema
      mutation ::Types::MutationType
      query ::Queries::QueryType
      use BatchLoader::GraphQL
    end
    
    # post_type.rb
    module Types
      class PostType < BaseObject
        field :id, String, null: false
        field :title, String, "标题", null: false
        field :images, [Types::ImageType], "图片", null: true
    
        def images
          # 这里的object是 Searchkick::HashWrapper
          BatchLoader.for(object.id).batch(default_value: []) do |post_ids, loader|
            Image.where(post_id: post_ids).each { |i| loader.call(i.post_id, i) }
          end
        end
      end
    end
    

    请教是我的使用方法有问题吗?