简单举例,一个 rails 项目里,使用了 redis 的 3.0.4 和 3.3.3 两个版本,想要在不同的 url 里动态使用不同 redis 版本
刚刚折腾了半天,终于找到一个方式,思路就是别在 gemfile 中添加任何 gem 的依赖,采用 $LOAD_PATH 加入依赖,每次 require 一个 gem 以后,记得使用完的时候在全局里删掉
$LOADED_FEATURES.delete
大概的代码是这样的
def set_book
if params[:id] == "1"
$LOADED_FEATURES.delete_if{|a| a.include?("redis-3.3.3")}
$LOAD_PATH.unshift File.expand_path('vendor/bundle/ruby/2.3.0/gems/redis-3.0.4/lib',root)
require File.expand_path('vendor/bundle/ruby/2.3.0/gems/redis-3.0.4/lib/redis', root)
elsif params[:id] == "2"
$LOADED_FEATURES.delete_if{|a| a.include?("redis-3.0.4")}
$LOAD_PATH.unshift File.expand_path('vendor/bundle/ruby/2.3.0/gems/redis-3.3.3/lib', root)
require File.expand_path('vendor/bundle/ruby/2.3.0/gems/redis-3.3.3/lib/redis', root)
end
@book = Book.find(params[:id])
end