不知道为什么我的 CPU 老是很高,window server 这个进程占用高
不知道该用 Nix: the package manager,还是直接用 NixOS?
@xinyifly 这两个东西我还没听说过。
NixOS 这个概念挺好的(解决了升级迁移痛点,所有东西打包在一起了),我愿意尝试一下
Nix 将所有软件包以彼此分离的方式进行存储,因此就不存在 /bin、/sbin、/lib、/usr 之类的目录;相 反,所有软件包都保存在 /nix/store 中。NixOS 的其他创新特色包括可靠升级、回滚、可重现的系统配置、二进制代码基于源文件的管理模型、多用 户包管理。
不可以吧,我需要自己能明白和控制每一行代码。
啥意思?
前端框架有用过一些,纯 CSS 的,还有 Vue 的,就是感觉太重了,而且有时候不容易控制,样式有冲突
哎,扎心,慢慢改吧,主要是我在这方面脑子一片空白,感觉一时半会儿上不来
评分和精选都是很不错的功能。加精选的话,我可以全部用一遍,然后自己做一个用户体验排序,好的放在前面,或者弄一个精选区,或者用颜色区分。加评分的话可能就要弄登录了?不知道怎么弄合适
我下载了,MAC 版本的软件,但是验证通不过,打不开,是否能稳定服务呢?
UI 这个问题,确实不太擅长 UX/UI 这些。看起来就是页面没有那种质感,现在就是简洁,有人说是像毛坯房 ,我想怎么补习一下这方面?不知道大家有什么书或者教程推荐的吗?之前看过一些书比如《给 XX 看的设计书》这种的,感觉有点儿作用,但是感觉作用不大。
UI 能力欠缺
我也有同感,感觉比较合适的方式是按功能模块分。
一个功能模块只能由一个团队负责(包括,开发,测试,运维),一个团队可以负责多个功能模块。
你的姿势正确吗?你搜一下使用电脑的正确姿势,严格按照那个来,症状大概会减轻一半。
我以为是在一个地方注册了就可以到处登录了,结果并不是。
@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 张表都有的,相同的。 其他几点我再考虑下,怎么调整。
嗯,不打扫灰尘就会多。。。
赏起来!
Magento 是 php 的。
BasicObject 应该是特例。BasicObject 无超类。
BasicObject.superclass # => nil
BasicObject 已经到了继承链的最顶端,所以不能适用此规则。
《Ruby 元编程》中大统一理论中第五条应该说的就是这个特例,第六条说的才是这个绕口令。
@runup 试试执行这两句,当然前提是通过系统安装好所有的依赖库:
bundle config build.nokogiri --use-system-libraries
bundle install