@gazeldx https://konghq.com/ 社区版本已经足够好用了
直接起个进程,死循环 + sleep。
我的做法是全局变量
$redis = Redis.new
但是在使用多线程服务器的过程中,这样的做法出现了一些弊端。如果在多线程的服务器中使用 redis,并且用到了事务,那多个这种多个线程之间共享一个 client 的做法就出问题了。这时候就加上了ConnectionPool,每次使用 redis 都从连接池里拿独立的连接。
create_redis_proc = ->() {
Redis::Namespace.new("mtx_api/#{Mtx.env}", redis: Redis.new(url: Mtx::SETTINGS[:redis]))
}
$redis = ConnectionPool.new size: 16, timeout: 5, &create_redis_proc
当数据量大之后,redis 分布在多台机器上,这时候的 redis client 就采用 Redis::Distributed,内部提供一致性 hash 来处理负载,不过需要牺牲一些命令,例如 bitop。同样也是根据需求来决定是不是需要加上 connectionPool
redis_config = YAML.load_file(::Rails.root.to_s + '/config/redis.yml')
instances = Redis::Distributed.new(redis_config[Rails.env], driver: :hiredis)
$redis = Redis::Namespace.new("kecheng/#{Rails.env}", redis: instances)
其实这才是原文吧:
英文: http://rackt.org/redux/docs/recipes/ServerRendering.html
中文: http://camsong.github.io/redux-in-chinese/docs/recipes/ServerRendering.html
一个完整的项目会有 js/css/images 等等的静态文件,比起介绍这些服务端渲染的 demo,更期待一个真实的服务端渲染的部署心得。开发的时候使用 webpack 来加载处理静态资源文件,那请问在做服务器端渲染的时候,静态文件是如何处理的?
例如在开发过程中引入 css
require('xx/xx/xx.css') //可以这样引入css,在服务端渲染的时候,这行可能需要根据NODE_ENV来跳过
但是图片没有找到合适的解决办法
<img src={require('xx/xx.png')} alt="xx" /> //这样的代码出现在render函数中,请问服务端渲染是怎么解决的?
class A
end
Object.send(:remove_const, :A)
@zamia 现在多少人啦?
10 个 table 估计也就一上午
二楼 + 三楼就是解决方案
rack 是 frameworks 与 server 之间的一个 gem,依赖 rack 开发的任何 favmework 可以跑在任何 rack 支持的 server 上。
rack is ruby make,是一个脚本执行工具。
多谢分享,不过我知道更多人在用 whenever,与其贴上这些配置,楼主不妨给大家讲讲这个 gem 优于其他类似 gem 的地方?
这样的干货听着很过瘾,感谢分享
期待响应式布局
bug
private method 调用时是不允许明确的使用对象的,即使是 self
class Foo
def b
self.a
end
def c
a
end
private
def a
puts 'a invoked'
end
end
f = Foo.new
f.a
f.b
f.c
# edit private -> protected, and try again
self.address= 和 self.timezone= 都被我重新定义过并且设置为 private 一般不会有人这么干
如果不想暴漏修改属性的接口
听起来感觉不错
user = User.find(1),
school = School.find(1)
你猜猜 user 是啥?
看到逗号没有?
这些做法纯粹是瞎折腾。用 scope 的话,名字起得不好都看不懂,更何况弄一堆约定似的 hash?
莫不如查查有没有 n+1,如果用 mysql,explain 一下,看看索引用的怎么样,这些貌似更实际点。
这种事情我第一反应是有没有人做过
我记着 better error 中可以回到某个堆栈,然后查看 binding。 也许你应该去翻翻 better_error
这个必须顶
/Users/david/.rvm/gems/ruby-2.0.0-p481@xxx/gems/actionpack-3.2.19/lib/action_view/helpers/form_helper.rb
def form_for(record, options = {}, &block)
raise ArgumentError, "Missing block" unless block_given?
options[:html] ||= {}
case record
when String, Symbol
object_name = record
object = nil
else
object = record.is_a?(Array) ? record.last : record
object_name = options[:as] || ActiveModel::Naming.param_key(object)
apply_form_for_options!(record, options)
end
options[:html][:remote] = options.delete(:remote) if options.has_key?(:remote)
options[:html][:method] = options.delete(:method) if options.has_key?(:method)
options[:html][:authenticity_token] = options.delete(:authenticity_token)
builder = options[:parent_builder] = instantiate_builder(object_name, object, options, &block)
output = capture(builder, &block)
default_options = builder.multipart? ? { :multipart => true } : {}
form_tag(options.delete(:url) || {}, default_options.merge!(options.delete(:html))) { output }
end
form_for 无非就是处理了下参数,然后最后调用 form_tag
form_for 中有 object 的概念,block 中需要有一个参数 t,t.object 为 form_for 第一个参数对象
form_tag 就是普通的 html form
给大神跪了!
敢问楼主,bae ruby 需要邀请码么?