部署期间Capistrano’Bundle Not Found’错误

当我运行cap deploy:update我得到下面的错误,表明找不到bundle 。 当我从cap shell运行echo $PATH ,缺少包含bundle的/var/lib/gems/1.9.1/bin路径,但是这个路径在/etc/profile~/.bashrc 。 有谁知道如何解决这个问题?

  [192.168.10.100] executing command *** [err :: 192.168.10.100] sh: *** [err :: 192.168.10.100] bundle: not found *** [err :: 192.168.10.100] command finished in 25ms failed: "sh -c 'bundle install --gemfile /data/www/apps/my_app/releases/201104 04163717/Gemfile --path /data/www/apps/my_apps/shared/bundle --deployment --qui et --without development test'" on 192.168.10.100 

要避免此类问题,您应该在两个位置安装最新版本的RVM(目前为1.13.5):本地和远程服务器。

接下来,检查您的deploy.rb是否有

 require "rvm/capistrano" require "bundler/capistrano" 

这条线不再需要了:

 $:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 

希望这会有所帮助

好的,我最近有过这方面的经验。 看起来有几种方法可以解决这个问题。 首先,您可以确定实际上远程执行(通过Capistrano)是否与主机本身相混淆。 看起来你已经使用Capistrano远程shell完成了这项工作:

 $ cap shell > echo $PATH 

好。 我敢打赌,当你登录到机器并在那里’echo $ PATH’时,正确的东西出来了……在这里也一样。

我找到了两种解决方法:一种是在远程主机的ssh守护进程中启用环境执行。 理论上这可行,但我不想问系统管理员是否可以打开它。 您基本上编辑ssh配置文件以将’PermitUserEnvironment’设置为’yes’并将所需的环境设置添加到部署用户的〜/ .ssh / environment文件 – 您的系统特定手册页可能比我尝试概括更好。

我选择了看似相当hackish的东西,并且缺点是它为你部署应用程序的所有主机都是全局的(所以如果你的ruby / gems位置在不同的主机上不同,这将不起作用) – 但是:我添加了config / deploy.rb脚本的default_environment设置:

 set :default_environment, { 'PATH' => "/usr/local/bin:/bin:/usr/bin:/bin://bin", 'GEM_HOME' => '/lib/ruby/gems/1.8', 'GEM_PATH' => 'lib/ruby/gems/1.8', 'BUNDLE_PATH' => '/lib/ruby/gems/1.8/gems' } AMMENDED: It isn't so 'hackish' if you consider the following: - The environment-specific deploy scripts (deploy/foo.rb) can override the default in deploy.rb - PermitUserEnvironment hides the configuration deep in the .ssh directory of the deploy user; :default_environment at least exposes it in the checked-in sources. 

这也解决了无法通过Capistrano进行远程耙式任务等问题。 请注意,Capistranogem,至少我拥有的版本以及以“标准”方式设置我的部署,会将gem安装到/ shared / bundle目录中,该目录会被应用程序选中。 我描述的方法需要在默认环境引用的系统目录中使用最小的gem子集,以便远程Capistrano命令可以执行bundle,rake等。

你没有说你是否在使用RVM(我的解决方案没有); 但是,此解决方案非常接近推荐的RVM解决方案之一。 或者,您可以使用’rvm / capistrano’解决方案; 在RVM网站上寻找RVM Capistrano集成以获取更多详细信息。

您是否在远程控制盒上手动安装了bundler gem? 在执行此操作之前,您无法使用bundle命令或安装任何软件包。

你在使用RVM吗?

DaneS一些可能的解决方案:

地点

 require "bundler/capistrano" 

在你的脚本中,bundler现在支持capistrano https://github.com/carlhuda/bundler/blob/1-0-stable/lib/bundler/capistrano.rb

有可能

 before "deploy:cold", "deploy:install_bundler" task :install_bundler, :roles => :app do run "type -P bundle &>/dev/null || { gem install bundler --no-rdoc --no-ri; }" end 

只有在找不到的情况下才会安装install_bundler任务。