2011-06-06 56 views
0

我有一个应用程序在nginx后面的精简版1.2.11上运行。我试图在开发机器上使用bundle update将我的应用程序更新到最新版本的宝石上,委托git,然后运行cap deploy。然而,薄是给我下面的错误:Rails 3打包程序更新

/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/runtime.rb:31:in `block in setup': You have already activated rack 1.3.0, but your Gemfile requires rack 1.2.3. Consider using bundle exec. (Gem::LoadError) 

在我有以下的宝石安装系统级服务器:

bundler (1.0.14) 
daemons (1.1.3) 
eventmachine (0.12.10) 
rack (1.3.0) 
rake (0.9.2) 
thin (1.2.11) 

我的Gemfile我aplication:

source 'http://rubygems.org' 

gem 'rails', '3.0.7' 
gem 'sqlite3' 
gem 'capistrano' 
gem 'thin' 
gem 'RedCloth' 
gem 'will_paginate', '3.0.pre2' 
gem 'jquery-rails' 

我相信瘦身需要机架1.3,而我的Gemfile中的某些东西需要机架1.2.3。我是否以错误的方式管理我的宝石?管理部署和正确的宝石控制的正确方法是什么?

我发现使用bundle exec thin start的作品,但我更喜欢一个解决方案,让我使用/etc/init.d/thin start

回答

3

请在您告诉我们您喜欢的内容之前阅读此文档:http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

问题是你更喜欢从安装到系统中的gem运行命令来运行具有它在Gemfile中指定的自己的依赖关系(即机架)的应用程序。你不能同时加载同一个库的两个版本,所以它会导致你的问题,因为每个命令都需要'bundle exec'。

+0

什么是一个伟大的简单答案干杯! – 2011-07-03 10:05:03

+0

这是一个有趣的阅读,但我不明白它是如何非常有用的。任何理智的瘦部署都需要使用/etc/init.d/thin start。除非有办法做到这一点,否则我们不应该使用Thin或Bundler。另外,使一个特定的应用程序服务器成为一个应用程序的依赖关系对我来说似乎很糟糕。我错了吗? – bioneuralnet 2011-11-27 05:28:39

+0

@bioneuralnet这就是你为什么我的回答没有帮助吗?问题是你不能从同一个解释器同时启动2个Rails应用程序 - 可能是因为有一些单身人士正在使用,你需要加载一些特定版本的库等,而Ruby无法应付它(尝试它在C#上的Java)中,捆绑器只解决了依赖版本管理的问题。这就是为什么你需要启动(以某种方式)为每个应用程序分开服务器。但是你选择哪个服务器是你的问题,也许还有其他服务器可以产生单独的Ruby进程来启动你的应用程序? – MBO 2011-11-28 15:03:32

-1

只要在你的cap脚本开始时做bundle exec,他会从bundler中拾取宝石。

通常我有同样的问题,如果我有在系统/目前使用的宝石更新版本的一些宝石。

我甚至有别名叫bebundle exec。 rvm的新版本也会自动捆绑exec exec :)。