【问题标题】:RVM why don't gems install to locally to project folder?RVM 为什么不将 gems 安装到本地项目文件夹?
【发布时间】:2012-09-29 23:00:00
【问题描述】:

这是我的问题:

我有一个项目,我正在尝试将 Gems 本地安装到该项目。例如,如果我从 Gemfile 安装设计,然后运行捆绑安装,它不会将任何控制器放入项目的控制器目录中。相反,我必须在 RVM 目录中寻找特定 gem 的控制器,将它们复制到我的项目中,然后从那里开始编写我的项目。

有什么建议吗?

【问题讨论】:

  • Bundle 不应将 gem 代码安装到您的应用程序代码中。在 Devise 的情况下,它是控制器、视图、模型以及任何其他将保留在 gem 本身中的东西。如果您需要覆盖某些内容,例如视图,Devise 有一个内置生成器,可以将视图放入您的应用程序rails generate devise:views。 Gems 可以将库代码与您自己的代码隔离开来。您是否有理由需要访问 Devise 的控制器?根据经验,您不应该直接更改 Devise 的代码。
  • 那么例如,应该与 Devise 安装一起提供的 users_controller 不应该在我的应用程序控制器中?这很奇怪......
  • 是的,没错。如果你正确地设置了你的路由,并且正确地安装了 Devise,它就会知道该做什么,并且它的用户控制器会做这些事情。它不需要直接存在于您的应用中。
  • 谢谢谢恩!我很感激......我只是不明白,对rails还是新手,我有点明白,但不是一直。我以前做过php,但是这个有点不一样。
  • 没问题。当我第一次开始使用 Ruby/Rails 时,我对编程非常陌生。诚然,宝石也让我感到困惑。就挂在那里。祝你好运。

标签: ruby-on-rails ruby devise rvm bundler


【解决方案1】:

我认为上面的评论回答了您的问题 - 当您将像 Devise 这样的 gem 添加到您的应用程序时,它通常不会将代码直接放入您的应用程序中。有时它会提供一个生成器来安装它的某些部分,但大多数情况下它会更改配置文件,以便 gem 中的代码在启动时被拉入你的应用程序。

您可以使用 --path 选项让 bundler 将 gem 安装在您应用的“供应商”子目录中,而不是在 RVM/Ruby 主目录中。但是您通常只想为生产部署而不是开发这样做。

【讨论】:

  • 好的...所以如果我想将它部署到远程服务器,我会做一个 bundle install --path 然后它会为我打包所有这些?这很漂亮。我只是担心,我是 Rails 新手,看起来很简单,但在其他时候它似乎相对复杂。感谢您的帮助,非常感谢!
  • 没错,而且很漂亮。 ;) 只需运行bundle install,Bundler 就会处理您的所有依赖项,无论您是在服务器上还是在本地开发。如果您在服务器上运行多个应用程序,最好考虑添加 RVM 以使它们保持良好隔离。
  • bundle install 会将您的依赖项安装在默认位置——在原始问题的 RVM 深处。 bundle install --path vendor/bundle 将它们全部放在项目的那个目录中。这是一种在同一服务器上的不同应用程序之间保持 gem 分离的好方法。
  • 彼得,我只是要将一个应用程序部署到服务器......可能有很多 Gems。我真的不明白为什么事情会这样发生。就像我说的那样,我对 Rails 等比较陌生,所以有点吓人! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 2021-05-13
  • 2012-07-29
  • 2012-09-30
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多