我有一个自定义gem作为.gem文件构建,我试图从我的Gemfile引用。我已将.gem文件与.gemspec一起放在vendor / gems文件夹中。我的Gemfile有以下行:
gem 'umlgrader', '1.0.0', :path=>'vendor/gems'
当我运行bundle install时,它声称找到了gem,但它说它正在“使用”gem,而不是“安装”它,即使之前没有在我的机器上安装gem。当我尝试运行我的应用程序时,我在尝试调用gem中的任何方法时都会得到NoMethodError。为什么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存储库。如果我不需要,我宁愿不这样做。
答案 0 :(得分:0)
Bundler文档在该主题上有点神秘,但这是Bundler的预期行为。要使用path
选项,您必须在所需位置解压缩gem。
但对Heroku而言应该没问题。毕竟,即使宝石已经解压缩,你仍然在使用Bundler。这只是宝石安装过程中的一小步......
答案 1 :(得分:0)
您需要将存储库从github(或其他来源)克隆到您的自定义文件夹。在下面的示例中,重现我如何使用自定义路径编辑分隔文件夹中的gem的步骤:
mkdir /bundle/custom_gems
。cd /bundle/custom_gems
。git clone <gem-repository-source>
。克隆是必需的,因为如果从计算机上的其他文件夹复制,则可能会丢失某些文件。gem '<gem-name>', path: '/bundle/custom_gems/<gem-name>'
。mkdir <my-app>/gems
。cd <my-app>/gems
。git clone <gem-repository-source>
。克隆是必需的,因为如果从计算机上的其他文件夹复制,则可能会丢失某些文件。gem '<gem-name>', path: '/bundle/custom_gems/<gem-name>'
。volumes:
- ./app/gems:/bundle/custom_gems
通过此操作,您的本地文件夹(您的计算机)将 ./ app / gems 中的文件复制到Docker容器中的 / bundle / custom_gems 。
如果您不使用docker-compose,则需要在Dockerfile中添加以下内容:
ADD ./app/gems /bundle/custom_gems