Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
yang
@heroyct
会员
第 33357 位会员 / 2017-10-26

18 篇帖子 / 140 条回帖
8 关注者
0 正在关注
2 收藏
未设置 GitHub 信息。
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • 为什么需要同时使用 nginx 和 puma at 2019年05月08日

    nginx 是 web 服务器,比如还有 apache

    但是只有 nginx,无法使用 rails 程序,必须有东西来连接 web 服务器和 rails 程序

    这个程序就是 puma,也叫 rack 服务器,类似的还有 unicorn 等

    只有 puma 好像也可以跑起来,但是它只有十几个线程,同时请求太多就不行了

    nginx 的连接数可以有上千个,可以同时处理更多请求

  • Ruby 面向对象编程之 SOLID at 2019年04月24日

    一直感觉 rails 的 model 不符合单一职责原则,但是对数据库操作更方便了?

    比如干了这些事

    • 数据库的各种操作
    • 表内一条数据的实体
    • validation
    • callback
  • rails api ,如果用 jwt,怎么进行验证码验证呢,验证码的信息应该保存在哪儿呢 at 2019年04月17日

    验证码验证和 JWT 好像没什么关系?

    JWT 登录的大概流程----参考代码使用这个ruby-jwt

    首次访问 (登录)

    客服端 输入用户名和密码登录

    服务器 验证用户名,密码,验证码,正确就返回一个 jwt token,里面包含一些用户信息,比如 ID 之类的

    payload = {user_id: user.id, expire: (Time.now + 1.week).to_i}
    
    token = JWT.encode payload, secret_key
    

    第二次访问

    客服端 把接收到的 token 发送给服务器

    服务器 对 token 进行解析,得到你开始设置的用户信息,比如 ID 什么的,验证 ID 是否有效,是否过期之类的

    decoded_token = JWT.decode token, nil, false
    decoded_token包含了你开始设置的user_id和expire
    
  • 设置 auth 之后,数据丢失 at 2019年04月08日

    docker-compose up 应该不会让 docker volume 消失,可以用这个查看 volume

    docker volume ls
    docker inspect { volume_name }
    

    这个也许有帮助

    https://stackoverflow.com/questions/45636883/docker-compose-using-volume-from-exisiting-container

  • 如何看待 996.ICU at 2019年04月02日

    每天不加班或者加班一小时以内的应该也不少?

  • 安装 ckeditor 富文档,报错:couldn't find file 'ckeditor/init' with type 'application/javascript' at 2019年03月28日

    https://github.com/galetahub/ckeditor

    好像只需要这个 (未测试)

    Rails.application.config.assets.precompile += %w[ckeditor/config.js]
    
  • 使用 accepts_nested_attributes_for 去 update 一对多的嵌套表,为什么 update 变成了 insert at 2019年03月18日

    可能是 form 没写好,用 fields_for 会自动帮你输出 id field

    <%= form.fields_for :dirary_pictures do |pic| %>
    <% end %>
    
  • 写码 2年,身体一天不如一天大佬们是怎么调节的 at 2019年03月18日

    少加班,多运动,吃的清淡,少玩手机

    眼睛干涩

    这个我也想问,没找到啥特别好的办法

    目前在用这些

    • mac night shift
    • 定时看看外面
    • 起床后做一会眼睛按摩
  • 渐进式迁移到现代前端开发模式 — 用 Webpacker 替代 Sprockets 实现前端资源的管理 at 2019年03月14日

    @jasl 有的,需要自己加个 helper,从 webpack 的 manifest 文件 (webpack-assets.json) 里面读取带 digest 的文件名 (webpacker 好像自带)

  • 渐进式迁移到现代前端开发模式 — 用 Webpacker 替代 Sprockets 实现前端资源的管理 at 2019年03月13日

    感觉直接用 webpack 打包上传到 CDN 也不错,配置稍微麻烦点

  • 细说计算机底层整型编码机制 at 2019年02月25日

    理解了这个以后,就能明白整数加整数可能会是负数是什么原因

    #include <stdio.h>
    
    int main()
    {
        int f1 = 2147483647;
        int f2 = 1;
    
        printf("%d", f1 + f2);
    
        return 0;
    }
    
    输出 -2147483648
    
  • 详谈 IEEE 浮点数编码机制 at 2019年02月25日

    很多数字用浮点数 (二进制表示) 无法精确表示,只能近似表示,精度取决于二进制的位数,一些要求高精度的时候也许会有问题。

    比如 123.456 - 123.444 = 0.012,我们期待是 0.012

    ruby 里面

    pry(main)> 123.456 - 123.444
    => 0.012000000000000455
    

    c 里面

    #include <stdio.h>
    
    int main()
    {
        float f1 = 123.456;
        float f2 = 123.444;
    
        printf("%f", f1 - f2);
    
        return 0;
    }
    
    => 0.012001
    

    C 可以在这个网站 compile 查看结果

    http://www.tutorialspoint.com/compile_c_online.php

  • 有没有人试过绕开依赖来 rvm install ruby at 2019年02月22日

    https://stackoverflow.com/questions/16563115/how-to-install-rvm-system-requirements-without-giving-sudo-access-for-rvm-user

    https://stackoverflow.com/questions/18284364/how-do-i-install-rvm-without-root-access

    没试过 不知道可行不

  • 请教下 Ruby 中如何将 UTF-8 编码的中文转为 Unicode 编码方式存在文件中 at 2019年02月21日

    unicode 是字符集

    utf-8 和 utf-16 是 uncode 的具体编码方式

    utf-8 中文用 3 个字节 (好像不全是),英文用 1 个字节

    pry(main)> '我'.encoding
    => #<Encoding:UTF-8>
    pry(main)> '我'.bytes
    => [230, 136, 145]
    pry(main)> 'a'.bytes
    => [97]
    

    utf-16 中文英文都是 2 个字节

    pry(main)> '我'.encode("UTF-16BE").bytes
    => [98, 17]
    pry(main)> 'a'.encode("UTF-16BE").bytes
    => [0, 97]
    

    如果都是中文,utf-16 编码可以让文件相对小些,不过感觉现在流行用 utf-8

  • 细说计算机底层整型编码机制 at 2019年02月14日

    写的挺好

    【编码的奥秘】感觉这本书写的很通俗易懂,有兴趣的可以看看

  • ActiveRecord::QueryCache#call 耗时异常 at 2019年02月14日

    https://stackoverflow.com/questions/35492483/very-slow-activerecordquerycachecall

    也许是一些 request 导致数据库有很多慢的 query,可以把 log 调出来看下

  • 推荐一个简单有效的减肥方法:生酮饮食 at 2019年01月22日

    多看道德经,身心放松,身体自然好

  • 关于 URL 规范 at 2019年01月11日

    我觉的都没毛病,关键看 API 是给谁用的,API 使用者觉的方便好用不

    REST 的好处是熟悉 REST 的开发者对于类似的 API 上手快一些

    还有 API 的整体设计统一也很重要

    比如取得一个动物园的所有动物

    可以这样

    animals?zoos_id=:id

    这个时候获取一个动物详情,animal/:id 相对比较自然

    也可以这样

    /zoos/:id/animals

    这个时候获取一个动物详情,/zoos/:id/animals/:id 相对比较自然

  • react and rails 最佳实践? at 2018年12月18日

    可以先写一两个画面,然后看看这里

    https://github.com/markerikson/react-redux-links/blob/master/react-architecture.md

  • 用 Terraform 自动化构建基础设施 at 2018年12月14日

    @wppurking

    那现在核心是 "让一人负责基础设施" 的部署,小团队没有问题,再大一点的团队可能会有基础设施的构建权限或者基础设施的变化的问题。

    多谢回复。

    是的,目前不到 10 个人,IAM 权限没有分那么细,实际进行terraform plan限制成 2 个人来减少误操作。

    从安全问题考虑的话,我觉的主要是在 IAM 对开发人员的权限进行分配。

    比如一般的人员只可以执行获取 resource 的操作,无法删除,更改之类的

    这样一般开发人员即使terraform destroy,并且输入 yes 以后,也不会被拉出去祭天。。

    当然相应的开发就没那么方便了,如何取舍取决于你目前的团队

  • 用 Terraform 自动化构建基础设施 at 2018年12月14日

    @wppurking

    Terraform Collaboration for Everyone 目前还没用过,还没感觉到使用的必要性 (以后也许会)

    terraform apply 目前是在 sandbox 构建以后,merge 到 mater,然后自动在 CI 上面进行

    也许有点多余了,让固定的一个人从本地执行也许就够了,毕竟更改不是那么频繁

    terraform destroy 基本只在 sandbox 测试的时候用,production 目前还没用到

  • 如何部署 Rails 项目到 Kubernetes,Docker 集群,项目包含 MongoDB,Rabbitmq,Redis 等等 at 2018年11月22日

    微服务好像喜欢这样? GCP + Kubernetes + Go + Other language

  • 请教 继承 父类后 需要 覆盖 父类的 private method 如何做到 在不加上 private 宣告 ,仍然是 private method at 2018年11月19日

    需要子类实现的话,应该是 protected 吧

    class A
        protected
         def  priv_a
                 3
         end
    end
    
    class B   < A
        def priv_a
              5
        end
    end
    

    要实现类似 JAVA 之类的 private,可以看下这个

    https://stackoverflow.com/questions/1565269/are-there-good-reasons-for-private-to-work-the-way-it-does-in-ruby/1565640#1565640

  • 同样是 Range , 为啥后者没有 size ? at 2018年11月15日

    源码有注释,开头和结尾必须都是数字才返回 size

    Both the begin and the end of the Range must be Numeric, otherwise nil is returned.

    # rng.size                   -> num
    # 
    # Returns the number of elements in the range. Both the begin and the end of
    # the Range must be Numeric, otherwise nil is returned.
    # 
    #   (10..20).size    #=> 11
    #   ('a'..'z').size  #=> nil
    #   (-Float::INFINITY..Float::INFINITY).size #=> Infinity
    def size()
        #This is a stub, used for indexing
    end
    
  • cell gem 默认不进行 html escape 问题 at 2018年11月14日

    终于把 cell gem 删除了

    为了尽量少改动代码,扩展 render partial 来实现了类似的接口

    1. 添加一个 helper

    # app/helpers/cell_helper.rb
    
    module CellHelper
      def cell(cell_name, options = {})
        cell_class = class_from_cell_name(cell_name)
        cell_class.new(self, options)
      end
    
      private
    
      def class_from_cell_name(name)
        "#{name}_cell".camelize.constantize
      end
    end
    

    2. 添加一个 cell 的 base 类

    # app/cells/cell_base.rb
    
    class CellBase
      attr_reader :context
    
      def initialize(context, options = {})
        @context = context
        @options = options
      end
    
      def call(method_name, options = {})
        send(method_name, options)
      end
    
      protected
    
      def render(options = {})
        locals = options.fetch(:locals, {})
        locals = locals.merge(cell: self)
        called_method_name = caller_locations(1, 1)[0].label
    
        context.render(
          partial: template_file_path(called_method_name, options),
          locals: locals
        )
      end
    
      def template_file_path(method_name, options)
        file_name = options[:file].present? ? options[:file] : method_name
    
        folder = self.class.to_s.underscore[0..-6]
        "#{folder}/#{file_name}"
      end
    end
    

    3. 让所有的 cell 类都继承 CellBase

    class SampleCell < CellBase
    end
    

    4. 把 xxx.erb 文件改成_xxx.html.erb 文件 (partial file)

  • 如何给 Rails 做 health check at 2018年11月12日

    我们目前也使用 AWS

    scaling 使用的是 Auto Scaling,当 CPU 或者内存超过一定量的时候,就自动启动新的 EC2 Instance

    health check 用的 NewRelic Infrastructure 来监视 nginx,unicorn 等进程,发现异常后发送到 slack

    如果只是一时的大量请求,仅仅扩展 web server 就可以解决的话,用 Auto Scaling 应该可以解决问题

    AWS 的 health check 没实际用过,看了下文档,好像支持任意的 command,可以换成监视 pumma 的进程挂没挂 https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html

  • 在 irb 中和源文件中直接定义方法不同? at 2018年11月04日

    顶级作用域中定义的方法会成为 Object 的 private 方法,和下面的定义一样

    class Object
      private
    
      def meet
        puts “in main”
      end
    end
    

    几乎所有对象,类都继承于 Object,所以他们也间接的拥有了私有方法 meet

    #                            +---------+             +-...
    #                            |         |             |
    #            BasicObject-----|-->(BasicObject)-------|-...
    #                ^           |         ^             |
    #                |           |         |             |
    #             Object---------|----->(Object)---------|-...
    #                ^           |         ^             |
    #                |           |         |             |
    #                +-------+   |         +--------+    |
    #                |       |   |         |        |    |
    #                |    Module-|---------|--->(Module)-|-...
    #                |       ^   |         |        ^    |
    #                |       |   |         |        |    |
    #                |     Class-|---------|---->(Class)-|-...
    #                |       ^   |         |        ^    |
    #                |       +---+         |        +----+
    #                |                     |
    #   obj--->OtherClass---------->(OtherClass)-----------...
    

    源文件中定义也是一样的,我是这样测试的

    1. 写个 test.rb 文件

    def meet
      puts '213'
    end
    
    meet
    
    obj = Object.new
    obj.meet
    

    2. 执行以后可以发现一般的对象也拥有了 meet 私有方法

    $ ruby test.rb
    213
    test.rb:8:in `<main>': private method `meet' called for #<Object:0x007fda1107c4f0> (NoMethodError)
    
  • 修改 Ruby 核心类和模块的方法 at 2018年10月31日

    @easy_install 有参考Ruby程序员修炼之道,实际开发中我用的最多的是 4 和 5,其他的感觉风险有点高,很少用到

  • Ruby China 7 岁生日快乐 at 2018年10月31日

    🎁 🎁 🎁 🎉 🎉 🎉 🎉

  • 关于点击数 Redis 缓存的最佳实践问题 at 2018年10月26日

    google analytics 或者
    td-agent + google bigquery 自己定义字段来统计

  • 上一页
  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一页
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English