Bre*_*rts 9 rack sinatra bundler
想象一下Rack应用程序,它在启动时创建一些其他Ruby应用程序的实例并将路由映射到这些应用程序.此应用程序的Rack依赖性为1.2.2.
现在假设我们正在开发一个将由该应用程序运行的子应用程序.它具有1.2.6的Sinatra依赖性并使用Bundler.这是宝石文件是一个贫瘠的:
source "http://rubygems.org"
gem "sinatra", "1.2.6"
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我们bundle install这个子应用程序,Bundler,不知道父应用程序的Rack 1.2.2依赖性,将安装与Sinatra 1.2.6兼容的最新版本的Rack:当前1.3.2.我们的Gemfile.lock将是:
GEM
remote: http://rubygems.org/
specs:
rack (1.3.2)
sinatra (1.2.6)
rack (~> 1.1)
tilt (< 2.0, >= 1.2.2)
tilt (1.3.2)
PLATFORMS
ruby
DEPENDENCIES
sinatra (= 1.2.6)
Run Code Online (Sandbox Code Playgroud)
当我们尝试启动父应用程序(启动我们的子应用程序)时,我们将得到:
You have already activated rack 1.2.2, but your Gemfile requires rack 1.3.2. Consider using bundle exec. (Gem::LoadError)
处理这种情况的正确方法是什么?是的,我们可以明确要求机架1.2.2,但我们有效地说明了依赖的依赖性.我想,理想情况下,父应用程序将是我们的子应用程序需要的gem,但在这种情况下,我们没有能力做到这一点.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |