表示支持
冒昧的问几个想法或者问题 ,面试官最担心的是什么?是水分
但这样,看起来会越长越像 leetcode 吗?
我们公司有一个ruby 1.9.3
/ rails 3.x
的项目
在用 sidekiq-cron
x = x.to_i.succ
x = x.to_i.next
或者你自己写一个方法变成你想要的简单,其实,都没什么卵用,还不如宁愿多写几行让别人更容易看懂
SSO 是前提,不做 SSO 你也还是需要想办法做数据共享
一般场景有两种,全栈
or 前后端分离
,但都需要鉴权统一请求 SSO
全栈
Java 做 Java 的,Rails 做 Rails 的,「提供另外一个系统的 URL 跳转」,通过跳转的方式进行切换,但是在用户体验上来说,浏览器页面始终在一个系统
前后端分离
前后端分离我知道的两种方式
题主随便建两个应用尝试一下应该就会有想法了
如有意见,还望轻喷 ...
obfuscate_id 管用,非常感谢
很抱歉,看到大家的回答我才意识到自己的问题描述的非常差
这个问题最重要的是在于转成 Int 的同时,数据已经被混淆
非常感谢大家的积极回答,你们的每一个意见和建议对我都有或多或少的帮助
最近有点少来了
目前先用octopus
能用,有点丑陋
module CoreExt
module ActiveRecord
module ConnectionAdapters
module ExecutionControl
# 切换TiDB connection
def tidb_conn
::ActiveRecord::Base.connection_proxy.current_shard = :tidb
::ActiveRecord::Base.connection_proxy
end
# 记录当前线程使用的connection,当切换tidb后,一直使用tidb
def current_connection
Thread.current['octopus.select_connection'] ||= :master
end
def current_connection=(shard_symbol)
Thread.current['octopus.select_connection'] = shard_symbol
end
def execute(*args)
# 只拦截 SELECT 并且是白名单内的
return super unless args.first =~ /^SELECT/
# 这里很蠢,用args.last的"Order Load"来判断当前select table
return super unless WHITELIST.include?(args.last[0...-5])
if ::ActiveRecord::Base.connection_proxy.current_shard == :master
if self.current_connection == :master
result = super
return result if result.count > 0
self.current_connection = :tidb
end
result = tidb_conn.select_connection.execute(args.first, args.last)
else
result = super
self.current_connection = :tidb
end
::ActiveRecord::Base.connection_proxy.clean_connection_proxy
result
end
private
# 需要使用tidb的 table 名单
WHITELIST = ["Order"...]
end
end
end
end
ActiveRecord::ConnectionAdapters::Mysql2Adapter.include CoreExt::ActiveRecord::ConnectionAdapters::ExecutionControl
这个贴先结了吧,有问题再重新开一个 再次感谢大家!!!
用两种 DB 并不是为了处理冷热的场景而决定使用两种 DB, 而是打算使用 TiDB,属于试用阶段而考虑让冷数据先放 TiDB
proxy,目前是在研究的,我想的是 proxy 并非 proxy db,毕竟目前还只是针对一个 model
至于你说过家家的方案,sorry,可能是我个人想出来的解决思路有点 low
数据已经分布好了,现在正解决如何不造成代码大量修改的情况下兼容分库查询
目前做了一次在 controller 使用octopus手动切换查询的实验
但这个有点痛苦,你得找出所有相关的 controller,然后重复着 mysql 找不到去 Tidb
分库是上级决定了
目前 亿量级别的数据应该都会考虑把查询放在 TiDB,Mysql 保留热数据 update
迁移 TiDB 还属于逐步迁移的过程,这个也是一次 TiDB 的实验,还不敢全动
我一开始是打算把 ActiveRecord:: Querying 的所有方法都打上
举个例子,这里使用了octopus进行切换数据源
...
def self.all(*args)
# mysql
result = find(:all, args)
return result if result.count > 0
# mysql 不存在 去tidb
# tidb
using(:tidb).find(:all, args)
end
...
但,不一定能覆盖到所有的 select sql
一个 controller 可能会有很多直接调用查询或间接
ActiveRecord 可能有 find
、find_by
、all
、last
、first
...等等的产生 select sql 的方法
如果给 ActiveRecord 的这些方法去打补丁,就需要给所有会产生 select sql 相关的方法都打上吗?
请问,可以用什么方式可以挂在所有产生 select 的方法上?
很抱歉,很久没有上论坛了,没能及时回复。
由于当时做的时候时间紧所以没有总结,很遗憾。
我记得是用 axlsx 做的 axlsx + axlsx_rails 的 gem 结合,然后自己在后端导出时自定义标题然后遍历数据组装成一个xlsx
导入时也一样,读取指定字段或者位置的数据进行组装。
希望还能帮助到你!
你的 show 方法第一句代码就用了 find_by_id,为什么下面就不继续用 find_by_id
我有一个想法,但不一定是好的方法
就像我上一个回答那样,你的时间区间不一定要在 view 形成
你的 view 需要显示两个时间,最好做成两个参数,如 start_at end_at,这样你可以做默认值
后台接收 params 改造一下,在使用 params[:search] 之前,加一个 params[:search][:renovation_date]
params[:search][:renovation_date] = params[:search][:start_at].to_date .. params[:search][:end_at].to_date
# 如果查询时不需要start_at和end_at的存在,可以进行delete。
我记得 Rei 有发过这个经验帖 https://ruby-china.org/topics/16633
你可以将两个时间拆分成两个参数传
var renovation_date_start = "2017-09-12";
var renovation_date_end = "2017-09-13";
rails 接受 params
# 字符串转日期
renovation_date_start = params[:renovation_date_start].to_date
renovation_date_end = params[:renovation_date_end].to_date
# 生成日期区间
renovation_date = renovation_date_start .. renovation_date_end
# 使用
Customers.where(renovation_date: renovation_date)
或者楼主可以使用 sql between
果然 2L 说的那样,是我太蠢了 ,感谢大家的回答!!
是的,这个还只是内部调试用的。
结贴了,感谢大家的帮助,这都是服务器惹的祸~
已经解决,谢谢各位
#2 楼 @catherine #3 楼 @jasl #4 楼 @mitchell #5 楼 @zyjloveher #6 楼 @killernova 谢谢大家的回复,因为我知道的 gem 不多,所以不好选,项目其他地方已经使用了 CSV 做导出 就统一这种方式,并且使用 xls.erb 来写格式 但现在这种格式并不方便导入,所以请大家指教一下 有什么 gem 对导出时自定义样式以及 windows 常用 oa 文件导入都能胜任的 1、导出数据,主要用来查看,防止过长的数字导出后变成科学计数法之类的数据 2、导出编写导入数据的一个模板,提供给管理人员根据模板来填写需要导入的数据,保证编写后能正常导入 3、导入数据,根据导出的模板被管理员编写数据完成后的文件来进行导入
为什么没人回帖,是我描述的不好吗?
#27 楼 @firephenix 不过我目前还在职,有意向换地,可以聊聊
#25 楼 @firephenix http://mapanalee.coding.io/post/%E7%AE%80%E5%8E%86Ruby%E7%89%88/ 先看看我写着玩的 ruby 版简历合不合口味