Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 捆绑程序找不到自定义gem_Ruby On Rails_Bundler - Fatal编程技术网

Ruby on rails 捆绑程序找不到自定义gem

Ruby on rails 捆绑程序找不到自定义gem,ruby-on-rails,bundler,Ruby On Rails,Bundler,我有一个作为.gem文件构建的自定义gem,我正试图从我的gem文件中引用它。我已将.gem文件与.gempec一起放在vendor/gems文件夹中。我的文件包含以下行: gem 'umlgrader', '1.0.0', :path=>'vendor/gems' 当我运行bundle安装时,它声称已经找到了gem,但它说它正在“使用”gem,而不是“安装”它,即使gem以前没有安装在我的机器上。当我尝试运行我的应用程序时,当它尝试调用gem中的任何方法时,我会得到一个NoMethod

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

gem 'umlgrader', '1.0.0', :path=>'vendor/gems'
当我运行bundle安装时,它声称已经找到了gem,但它说它正在“使用”gem,而不是“安装”它,即使gem以前没有安装在我的机器上。当我尝试运行我的应用程序时,当它尝试调用gem中的任何方法时,我会得到一个NoMethodError。为什么Bundler不安装gem

我将gem解包到该目录中,然后按如下方式编辑gem文件,从而使其正常工作:

gem 'umlgrader', '1.0.0', :path=>'vendor/gems/umlgrader-1.0.0'
这种解决办法并不可取。我希望能够使用Bundler安装gem,因为我正在尝试将应用程序部署到Heroku。我已经尝试了很多在网上找到的解决方案,但我愿意接受任何建议

编辑: 我已经阅读并尝试过的其他一些页面:


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

Bundler文档在这个主题上有点神秘,但这是Bundler的预期行为。要使用
路径
选项,必须在所需位置解包gem

但这对Heroku来说应该没有问题。毕竟,您仍然在使用Bundler,即使gem已经解包。这只是gem安装过程中的一个小步骤…

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

  • 在这种情况下,我在/bundle中使用了自定义\u gems文件夹:
    mkdir/bundle/custom\u gems
  • cd/bundle/custom\u gems
  • git克隆
    。需要克隆,因为如果从计算机中的其他文件夹复制,可能会丢失一些文件
  • gem文件中设置
    gem',路径:'/bundle/custom_gems/'
  • 重新启动应用程序
  • 在docker compose(或docker)中
  • docker与docker没有什么不同,在本例中,我在我的rails应用程序文件夹中使用了一个/gems文件夹:
    mkdir/gems
  • cd/gems
  • git克隆
    。需要克隆,因为如果从计算机中的其他文件夹复制,可能会丢失一些文件
  • gem文件中设置
    gem',路径:'/bundle/custom_gems/'
  • 如果使用docker compose,则需要使用配置绑定文件夹,如下所示:
  • 这样,您的本地文件夹(您的计算机)将/app/gems中的文件复制到Docker容器中的/bundle/custom_gems

  • 重新启动服务
  • 如果不使用docker compose,则需要添加docker文件,例如:
    ADD./app/gems/bundle/custom\u gems

    您能添加一些您尝试过的解决方案的链接吗?通过这种方式,我们可以避免推荐相同的东西。我已经阅读了Gemfile中使用:path的很多解决方案,他们都声称它可以正常工作,但显然不行。我也尝试过使用bundle包并将所有gem放在vendor/cache中,它在本地工作,但在我部署到Heroku时不起作用。它起作用了,只是对我们来说意义不大。我们继承了这个项目,它是一个超级怪异的目录结构,其中作为gem一部分的代码位于根级别,web项目位于其中。因此,当我们将存储库作为一个整体来看时,我们将通过在web项目中解包来复制代码。有没有一种方法可以让它在不使用:path的情况下使用.gem文件?当我不使用路径绑定器时,根本找不到宝石。
    volumes:
        - ./app/gems:/bundle/custom_gems