• 不知道为什么我的 CPU 老是很高,window server 这个进程占用高

  • 不知道该用 Nix: the package manager,还是直接用 NixOS?

  • @xinyifly 这两个东西我还没听说过。

    NixOS 这个概念挺好的(解决了升级迁移痛点,所有东西打包在一起了),我愿意尝试一下

    Nix 将所有软件包以彼此分离的方式进行存储,因此就不存在 /bin、/sbin、/lib、/usr 之类的目录;相 反,所有软件包都保存在 /nix/store 中。NixOS 的其他创新特色包括可靠升级、回滚、可重现的系统配置、二进制代码基于源文件的管理模型、多用 户包管理。

  • 不可以吧,我需要自己能明白和控制每一行代码。

  • 啥意思?

  • 前端框架有用过一些,纯 CSS 的,还有 Vue 的,就是感觉太重了,而且有时候不容易控制,样式有冲突

  • 哎,扎心,慢慢改吧,主要是我在这方面脑子一片空白,感觉一时半会儿上不来

    • 提交入口目前有了(之前没有放到显眼的位置,在 backdata.net 提交就可以了):https://backdata.net/submit-site.html
    • 面向的用户,大众用户(首页),后续分行业(AI,会计,法律,金融,程序员等)
    • 后面开源项目应该单独做一个页面吧,不知道大家有什么想法,开源项目还是挺多的
    • 目前有一个开发者导航页面:https://cooltools.top/developers.html,大家帮看看,有什么要添加的吗?
  • 评分和精选都是很不错的功能。加精选的话,我可以全部用一遍,然后自己做一个用户体验排序,好的放在前面,或者弄一个精选区,或者用颜色区分。加评分的话可能就要弄登录了?不知道怎么弄合适

  • 我下载了,MAC 版本的软件,但是验证通不过,打不开,是否能稳定服务呢?

  • UI 这个问题,确实不太擅长 UX/UI 这些。看起来就是页面没有那种质感,现在就是简洁,有人说是像毛坯房😂 ,我想怎么补习一下这方面?不知道大家有什么书或者教程推荐的吗?之前看过一些书比如《给 XX 看的设计书》这种的,感觉有点儿作用,但是感觉作用不大。

  • UI 能力欠缺

  • 前后端分裂 at 2018年01月21日

    我也有同感,感觉比较合适的方式是按功能模块分。

    一个功能模块只能由一个团队负责(包括,开发,测试,运维),一个团队可以负责多个功能模块。

  • 你的姿势正确吗?你搜一下使用电脑的正确姿势,严格按照那个来,症状大概会减轻一半。

  • 有人一起 Mastodon 吗? at 2017年04月13日

    我以为是在一个地方注册了就可以到处登录了,结果并不是。

  • @ericguo 多谢!

  • 感谢!

  • @vincent 好的,非常感谢您的建议!

  • 这里的 order_item 应该不会让用户直接操作,所有没有验证的问题。失败是正常,如果保存失败,能保证回滚和处理异常就好。创建之前都要执行validate的。

  • 嗯,controller 加ActiveRecord::Base.transaction do,觉得有些不对味。

  • 感谢。

    如果按照您这样 create order 和 create order_items 解决了,还有最后一步逻辑,下单后,清空购物车。

    Cart.where(user_id: current_user.id).destroy_all
    

    这个应该包含在事务中?这个逻辑该放在哪里呢?

  • @vincent , @mengqing 改造了一下,如果使用ActiveRecord::Base.transaction的话

    将 create 逻辑放到了 controller 中核心代码如下:

    def create
        ActiveRecord::Base.transaction do
          @order = Order.new(user_id: current_user.id, orderID: @orderID , message:params[:message], fixed_address: Address.find(address_id).full_address, total_price: @total)
          @order_saved = @order.save!
          current_user.carts.each do |cart|
            OrderItem.new(user_id: current_user.id, orderID: @orderID, product_id: cart.product_id, price: cart.product.price, amount: cart.amount).save!
            # raise "crash for test"
          end
          #raise "crash for test"
          Cart.where(user_id: current_user.id).destroy_all
        end
    end
    

    将 delete 逻辑放到了 controller 中核心代码如下:

    def destroy
        ActiveRecord::Base.transaction do
          OrderItem.where(orderID: @order.orderID).destroy_all
          @order.destroy!
        end
    end
    
  • @mengqing 这个明白了,多谢!

    Any exception that is not ActiveRecord::Rollback or ActiveRecord::RecordInvalid will be re-raised by Rails after the callback chain is halted. Raising an exception other than ActiveRecord::Rollback or ActiveRecord::RecordInvalid may break code that does not expect methods like save and update_attributes (which normally try to return true or false) to raise an exception.

  • 对于第 4 点,测试一下回滚。

    在 each 循环里面,抛出异常,测试是否能回滚。

    def create_order_items
          current_user = self.user
          current_user.carts.each do |cart|
            OrderItem.new(user_id: current_user.id, orderID: self.orderID, product_id: cart.product_id, price: cart.product.price, amount: cart.amount).save
            # 抛出异常
            raise "crash for test"
          end
          # raise "crash for test"
          Cart.where(user_id: current_user.id).destroy_all
        end
    

    日志如下,可以看到,已经 ROLLBACK

    Started POST "/orders" for ::1 at 2017-02-28 21:28:36 +0800
    Processing by OrdersController#create as HTML
      Parameters: {"address"=>"8", "pay_method"=>"alipay"}
      User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 4], ["LIMIT", 1]]
      Cart Load (0.6ms)  SELECT "carts".* FROM "carts" WHERE "carts"."user_id" = $1  [["user_id", 4]]
      Product Load (0.2ms)  SELECT  "products".* FROM "products" WHERE "products"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
      Address Load (0.2ms)  SELECT  "addresses".* FROM "addresses" WHERE "addresses"."id" = $1 LIMIT $2  [["id", 8], ["LIMIT", 1]]
       (0.1ms)  BEGIN
      SQL (0.4ms)  INSERT INTO "orders" ("user_id", "orderID", "created_at", "updated_at", "fixed_address", "total_price") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["user_id", 4], ["orderID", "1488288516220"], ["created_at", 2017-02-28 13:28:36 UTC], ["updated_at", 2017-02-28 13:28:36 UTC], ["fixed_address", "李明 17030006000 北京 北京 海淀区 青松国际 36203"], ["total_price", #<BigDecimal:7f98c1e6e680,'0.25E1',18(27)>]]
      User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
      Cart Load (0.3ms)  SELECT "carts".* FROM "carts" WHERE "carts"."user_id" = $1  [["user_id", 4]]
      Product Load (0.2ms)  SELECT  "products".* FROM "products" WHERE "products"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
      SQL (0.5ms)  INSERT INTO "order_items" ("orderID", "product_id", "price", "amount", "created_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["orderID", "1488288516220"], ["product_id", 4], ["price", #<BigDecimal:7f98c2152d60,'0.25E1',18(27)>], ["amount", #<BigDecimal:7f98c2152950,'0.1E1',9(18)>], ["created_at", 2017-02-28 13:28:36 UTC], ["updated_at", 2017-02-28 13:28:36 UTC], ["user_id", 4]]
       (0.2ms)  ROLLBACK
    Completed 500 Internal Server Error in 43ms (ActiveRecord: 3.5ms)
    

    结果是能够回滚,通过界面测试也没问题,订单和购物车都还是原样不变,只是我这里还没有加异常判断。

  • 非常感谢@mengqing 的指点。 第 1 点,加 index 是个不错的主意! 第 2 点。这里并不是 has_many 的关系,orderID 是生成后插入的,2 张表都有的,相同的。 其他几点我再考虑下,怎么调整。

  • 嗯,不打扫灰尘就会多。。。😄

  • 新增 “打赏” 功能 at 2017年02月25日

    赏起来!😀

  • Magento 是 php 的。

  • 关于 Ruby eigenclass 问题 at 2017年02月24日

    BasicObject 应该是特例。BasicObject 无超类。

    BasicObject.superclass # => nil

    BasicObject 已经到了继承链的最顶端,所以不能适用此规则。

    《Ruby 元编程》中大统一理论中第五条应该说的就是这个特例,第六条说的才是这个绕口令。

  • @runup 试试执行这两句,当然前提是通过系统安装好所有的依赖库:

    bundle config build.nokogiri --use-system-libraries
    bundle install