【问题标题】:Installing Gems with Bundler == Big problem使用 Bundler 安装 Gems == 大问题
【发布时间】:2011-06-27 19:47:30
【问题描述】:

如果我运行 bundle install ,一切都会过去。我重新启动 nginx,当我访问该站点时,我看到了乘客错误:

git://github.com/spree/spree.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)

我的宝石文件:

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'spree', :git => 'git://github.com/spree/spree.git' 
gem 'haml'
gem 'ruby-debug'
gem 'sqlite3', :require => 'sqlite3'
gem 'ckeditor', '3.4.2.pre'
gem "aged_revolt", :require => "aged_revolt", :path => "aged_revolt"
gem "spree_easy_contact", '1.0.2', :path => "#{File.expand_path(__FILE__)}/../vendor/gems/spree_easy_contact-1.0.2"
gem "honeypot-captcha"

当我运行 bundle show spree 时:

/home/shadyfront/.rvm/gems/ruby-1.8.7-p330@revolting_gems/bundler/gems/spree-44e4771f3a2a

知道如何/为什么会发生这种情况以及我如何才能克服这个问题吗?

这是我的 nginx.conf:

env               GEM_HOME=/home/shadyfront/.rvm/gems/ruby-1.8.7-p330@revolting_gems;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    access_log  /home/shadyfront/logs/user/access_revolting_age.log  combined;
    error_log   /home/shadyfront/logs/user/error_revolting_age.log   crit;

    include         mime.types;
    passenger_root  /home/shadyfront/webapps/revolting_age/gems/gems/passenger-2.2.15;
    passenger_ruby  /home/shadyfront/webapps/revolting_age/bin/ruby;
    sendfile        on;

    passenger_max_instances_per_app  1;
    rails_spawn_method               conservative;
    passenger_max_pool_size 2;

    server {
        listen             56943;
        passenger_enabled  on;
        root               /home/shadyfront/webapps/revolting_age/releases/20110215175319/public;
        server_name        localhost;
    }
}

【问题讨论】:

  • 乘客的哪个版本?你的 nginx 配置是什么样的?你有没有告诉它使用“revolting_gems”宝石组?

标签: ruby-on-rails rubygems nginx passenger bundler


【解决方案1】:

在处理基于 git 的 gem 时,这个问题似乎是乘客或捆绑程序中的一个错误。 This“解决方案”(我写的是供应商而不是供应商......)让我的乘客立即运行:

  1. 捆绑包
  2. 捆绑安装 --path 供应商/缓存

我认为http://www.ruby-forum.com/topic/213962 是同一个问题,据我所知还没有解决。愿此错误尽快修复...

【讨论】:

  • 我又一次偶然发现了这一点。绝对问题是由从 git 导入引起的,似乎有数百人遇到了这个问题。想知道是否有人真的在努力解决这个问题......
  • 我也必须使用它。很烦人。可能与 unicorn 以不同用户身份运行的事实有关。不知道如何解决它。
  • 这在 2016 年仍然适用于我。但是当使用 vagrant 并调用 vagrant halt / vagrant up 时,我必须重做这个......
  • 谢谢,从 2017 年开始。
【解决方案2】:

你确定你的版本号没有问题吗?我在 github 上没有看到这样的标签或版本“0.50.99”。

编辑:

我唯一能想到的另一件事是,由于 spree 是其他 gem 依赖项的容器,bundler 不喜欢你以这种方式定义需求。

一个 git 存储库应该至少有 一个文件,位于目录的根目录 包含 gem,带有扩展名 .gemspec。此文件必须包含 正如预期的那样,有效的 gem 规范 通过 gem build 命令。它绝不能 有任何依赖关系,除了 on git 存储库本身中的文件 以及 Ruby 的任何内置功能 或 Rubygems。

这来自manpage for bundler

【讨论】:

  • 我知道。这么奇怪。如果我将最新版本为 0.40.2,在 bundle install 之后返回:在 git://github.com/spree/spree.git 中找不到 gem 'spree (= 0.40.2, runtime)' (在主人)。源包含 'spree' 在:0.50.99 如果我执行后一个版本,它会通过捆绑包,但返回原始错误。
  • 在这种情况下您不需要版本号,因为您指向的 repo 确实有一个 gemspec,它报告版本 0.50.99(请参阅 the bundler docs)。这就是为什么当您将其更改为其他版本时它会中断。下次他们升级版本时它也会中断。如果您想更具体地了解版本,您应该删除它并使用:tag:ref
  • 这就是我收到spree.git (at master) is not checked out. 的原因吗?
  • 可能是。去掉版本号能解决问题吗?
  • 没有..哈哈。我试着弄乱 id、ref 和 branch 标签,但它们都出错了,并且不会传递 bundle。所以就像你说的,我刚刚删除了版本,然后运行它通过了。奇怪的部分来了。如果我将 --path 或 --deployment 标签设置为 bundle,bundle 将失败,说我的 sqlite3 不高于某个版本(它是。)。即使 --path 设置为我的默认 GEM_HOME。但是如果我只是做bundle install,那么它会通过,但不会出现上面提到的错误,并且没有安装 spree。
【解决方案3】:

那是因为你还必须在你的 nginx 启动脚本中指明 gem 的位置(特别是 bundler 的安装位置)。

bin/start

#!/bin/bash

TMPDIR=/home/shadyfront/webapps/truejersey/tmp GEM_HOME=/home/shadyfront/.rvm/gems/ruby-1.8.7-p330@true /home/shadyfront/webapps/truejersey/nginx/sbin/nginx -p /home/shadyfront/webapps/truejersey/nginx/

【讨论】:

    【解决方案4】:

    最简单的解决方法是通过运行在本地安装所有 gems

    bundle install --path vendor/bundle
    

    cleaner 方法是将您的 gem 保存在其 GEM_HOME(可能由 rvm 管理)并从 vendor/bundle 指向此目录:

    一步一步:

    • 在您的项目中创建一个目录vendor/bundle/ruby/
    • 从命令行创建符号链接(将 2.1.0 替换为您的 ruby​​ 版本):

      ln -s $GEM_HOME 2.1.0
      
    • 确保您的项目目录中有一个文件.bundle/config,其中包含该行

      BUNDLE_PATH: vendor/bundle
      

    就是这样。您现在可以像往常一样继续使用“bundle install”,而且 git gem 也将被正确引用。

    【讨论】:

      【解决方案5】:

      我在 2015 年 2 月遇到了这个问题,并在项目目录中本地安装 gem 为我解决了这个问题。

       $ bundle install --path vendor/bundle
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多