【问题标题】:Rack gem being shadowed using Apache2 and Passenger使用 Apache2 和 Passenger 对 Rack gem 进行遮蔽
【发布时间】:2012-01-17 15:54:36
【问题描述】:

我们使用 Apache2 和 Passenger (v3.0.9) 部署多个应用程序。 App Foo 是 Rails 3.0.11 应用程序,而 app Bar 是 Rails 3.1.3 应用程序。这两个应用程序都使用捆绑程序来管理它们的依赖关系。根据我对乘客文档的理解,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。我也尝试按照其他地方的建议进行 bundle install --path vendor/cache ,但这似乎没有帮助。

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

【问题讨论】:

  • 我最终只是删除了 config.ru 文件,我想这会使该应用程序不是 Rack 应用程序。有人愿意评论该解决方案吗?
  • 我也遇到了同样的问题,以后有更好的解决方案吗?
  • Kanzeon,我已经有几个月没有参与遇到这个问题的组织了。我们刚刚决定删除 config.ru 文件,一切似乎都正常。我看到几天前 Martin M 发布了一个解决方案。我不方便验证这一点,所以如果它适合你,请支持他的解决方案。

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


【解决方案1】:

我处于类似情况:一个 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 --deployment --quiet --without development测试

这个(--path 和--deployment)管理每个应用程序的gem存储库

{app_path}/shared/bundle/ruby/{ruby_version}/gems

所以在一个 Rail 3.0.11 应用程序中我有 rack-1.2.4 和 rails-3.0.11 而在 3.2.8 应用程序中我有 rack-1.4.1 和 rails-3.2.8 。 两颗宝石被精美地分开。

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

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多