机架宝石被Apache2和Passenger阴影化

时间:2012-01-17 15:54:37

标签: ruby-on-rails apache2 passenger bundler rack

我们使用Apache2和Passenger(v3.0.9)部署多个应用程序。 App Foo是一个Rails 3.0.11应用程序,应用程序栏是一个Rails 3.1.3应用程序。两个应用程序都使用bundler来管理它们的依赖项。根据我对Passenger文档的理解,Passenger和Bundler按预期工作,为每个应用程序加载必要的依赖项。 Foo取决于Rack 1.2.4,Bar取决于Rack 1.3.5。

当部署Bar并运行bundle install(通过Capistrano)时,安装了Rack 1.3.5。突然Foo得到以下乘客错误:

Gem::LoadError - You have already activated rack 1.3.5, but your Gemfile requires rack 1.2.4. Using bundle exec may solve this.

该消息试图提供帮助,但我不确定应该在哪个bundle exec上运行。我也尝试过在其他地方推荐的捆绑安装 - 路径供应商/缓存,但这似乎没什么帮助。

我可以卸载Rack 1.3.5,但在Bar的危险中。另一种解决方案是将Foo升级到Rails 3.1.x,但我想了解这里出了什么问题,因为我们可能会在将来运行不同版本的应用程序。

1 个答案:

答案 0 :(得分:0)

我处于类似的情况:一台Rails 3.0.11应用程序和同一服务器上同一域下的Rails 3.2.8应用程序。

使用Capistrano进行部署。

在config / deploy.rb中我有:

require 'bundler/capistrano'
在“cap deploy”期间,捆绑器配方运行:

  

cd {app_path} / releases / {release}&& bundle install --gemfile {app_path} / releases / {release} / Gemfile --path {app_path} / shared / bundle --demployment --quiet - withoutout development test

this(--path和--deployment)管理

中的每个应用程序gem库
  

{APP_PATH} /共享/束/红宝石/ {RUBY_VERSION} /宝石

所以在一个Rail 3.0.11应用程序中我有rack-1.2.4和rails-3.0.11而在3.2.8 APP中我有rack-1.4.1和rails-3.2.8。 两个宝石都是分开的。

也许你可以清理这些gemset存储库。