Bundler无法找到自定义宝石

时间:2014-09-17 12:35:15

标签: ruby-on-rails bundler

我有一个自定义gem作为.gem文件构建,我试图从我的Gemfile引用。我已将.gem文件与.gemspec一起放在vendor / gems文件夹中。我的Gemfile有以下行:

gem 'umlgrader', '1.0.0', :path=>'vendor/gems'

当我运行bundle install时,它声称找到了gem,但它说它正在“使用”gem,而不是“安装”它,即使之前没有在我的机器上安装gem。当我尝试运行我的应用程序时,我在尝试调用gem中的任何方法时都会得到NoM​​ethodError。为什么Bundler不安装宝石?

我已经通过在该目录中解压缩gem然后按如下方式编辑Gemfile来实现它:

gem 'umlgrader', '1.0.0', :path=>'vendor/gems/umlgrader-1.0.0'

这种解决方案不太理想。我更喜欢能够使用Bundler安装gem,因为我正在尝试将应用程序部署到Heroku。我已经尝试了很多我在网上找到的解决方案,但我对任何建议持开放态度。

编辑: 我已经完成并试过的其他一些页面: Bundler: installing a specific .gem file How to use Bundler with offline .gem file? How do I specify local .gem files in my Gemfile?

我也注意到很多人建议指向包含gem的Git存储库。如果我不需要,我宁愿不这样做。

2 个答案:

答案 0 :(得分:0)

Bundler文档在该主题上有点神秘,但这是Bundler的预期行为。要使用path选项,您必须在所需位置解压缩gem。

但对Heroku而言应该没问题。毕竟,即使宝石已经解压缩,你仍然在使用Bundler。这只是宝石安装过程中的一小步......

答案 1 :(得分:0)

没有Docker

您需要将存储库从github(或其他来源)克隆到您的自定义文件夹。在下面的示例中,重现我如何使用自定义路径编辑分隔文件夹中的gem的步骤:

  1. 在这种情况下,我使用 /捆绑包中的 custom_gems 文件夹:mkdir /bundle/custom_gems
  2. cd /bundle/custom_gems
  3. git clone <gem-repository-source>。克隆是必需的,因为如果从计算机上的其他文件夹复制,则可能会丢失某些文件。
  4. 宝石文件中设置:gem '<gem-name>', path: '/bundle/custom_gems/<gem-name>'
  5. 重新启动应用程序。

在docker-compose(或Docker)中

  1. 与docker几乎没有什么不同,在这种情况下,我使用我的Rails应用程序文件夹中的 / gems 文件夹:mkdir <my-app>/gems
  2. cd <my-app>/gems
  3. git clone <gem-repository-source>。克隆是必需的,因为如果从计算机上的其他文件夹复制,则可能会丢失某些文件。
  4. 宝石文件中设置:gem '<gem-name>', path: '/bundle/custom_gems/<gem-name>'
  5. 如果使用docker-compose,则需要使用 volumes 配置绑定文件夹,如下所示:
volumes:
    - ./app/gems:/bundle/custom_gems

通过此操作,您的本地文件夹(您的计算机)将 ./ app / gems 中的文件复制到Docker容器中的 / bundle / custom_gems

  1. 重新启动服务。

如果您使用docker-compose,则需要在Dockerfile中添加以下内容: ADD ./app/gems /bundle/custom_gems