ChatGPT解决这个技术问题 Extra ChatGPT

如何从 GitHub 源安装 gem?

我想从最新的 GitHub 源安装 gem。

我该怎么做呢?


D
Dominik Honnef

好吧,这取决于所讨论的项目。一些项目的根目录中有一个 *.gemspec 文件。在这种情况下,它将是

gem build GEMNAME.gemspec
gem install gemname-version.gem

其他项目有一个 rake 任务,称为“gem”或“build”或类似的东西,在这种情况下,您必须调用“rake”,但这取决于项目。

在这两种情况下,您都必须下载源代码。


只是一个提示,让人们知道它到底发生了什么。 gemname-version.gem 文件在调用 gem build 时创建
gem install gemname-version.gem 命令在哪里安装 git gem?我在本地机器上的任何地方都找不到以这种方式安装的引擎 gem。捆绑器将其隐藏在哪里?
我认为 gem install gemname-version.gem 行应该是 gem install --local gemname-version.gem
@Green - gem which gemname 应该告诉您特定的宝石在哪里,这对您不起作用吗?
嗨,我只有 Rakefile,我不知道如何安装它。有什么帮助吗?
M
Misha Reyzlin

如果您使用的是 bundler,您需要在 Gemfile 中添加类似这样的内容:

gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git'

如果有 .gemspec 文件,它应该能够在运行 bundle install 时获取并安装 gem。

UPD。 如评论中所述,要使 Bundler 正常运行,您还需要将以下内容添加到 config.ru

require "bundler" 
Bundler.setup(:default)

我还需要添加以下内容(添加到我的 config.ru):require "bundler" Bundler.setup(:default) 请参阅 bundler docs 了解更多详细信息
此外,还可以指定 ref、branch 或 tag 选项,例如 gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
还有:gem 'redcarpet', github: 'tanoku/redcarpet'akash.im/2012/06/05/bundler-new-github-option.html
@AmitPatel 非常感谢你!!! :branch => 'yourbranch',你的这条线刚刚为我解决了一个大问题。非常感谢你。
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5' <- :tag => '' 部分
K
Kamek

试试 specific_install gem,它允许您从其 github 存储库(如“edge”)或任意 URL 安装 gem。对于在多台机器等上分叉宝石和对它们进行黑客攻击非常有用。

gem install specific_install
gem specific_install -l <url to a github gem>

例如

gem specific_install https://github.com/githubsvnclone/rdoc.git 

您能否在 specific_install gem 上添加更多解释?
这正是我一直在寻找的,类似于 Python 的 pip git 支持。 gem specific_install -l 就像一个魅力!
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module 听起来很酷,但我不会进一步研究它。只是想发布它对我不起作用的情况,以防其他人即将根据 SO 推荐试一试。
@isomorphismes +1 对您的评论。我在这里创建了一个关于该错误的单独问题:stackoverflow.com/questions/27045874/…
这是救命稻草!谢谢你,先生。
m
mmoya

Bundler 允许您直接从 git 存储库使用 gem。在您的 Gemfile 中:

# Use the http(s), ssh, or git protocol
gem 'foo', git: 'https://github.com/dideler/foo.git'
gem 'foo', git: 'git@github.com:dideler/foo.git'
gem 'foo', git: 'git://github.com/dideler/foo.git'

# Specify a tag, ref, or branch to use
gem 'foo', git: 'git@github.com:dideler/foo.git', tag: 'v2.1.0'
gem 'foo', git: 'git@github.com:dideler/foo.git', ref: '4aded'
gem 'foo', git: 'git@github.com:dideler/foo.git', branch: 'development'

# Shorthand for public repos on GitHub (supports all the :git options)
gem 'foo', github: 'dideler/foo'

有关详细信息,请参阅 https://bundler.io/v2.0/guides/git.html


可能是最好的答案
请注意,如果您将这种方法与乘客和 apache / ngix 一起使用,您可能会遇到麻烦。运行 bundle 时,此类 git-gem- 依赖项不会全局安装,而是安装在当前用户的主目录中。乘客将作为您的网络服务器用户(例如 www-data)运行 ruby,该用户无权访问此目录,因此不会加载此“git-gem”。您将收到错误 ... is not yet checked out. Run bundle install first
C
Christian Schlensker

已过时(见评论)

如果项目来自 github,并且包含在 http://gems.github.com/list.html 的列表中,那么您只需将 github 存储库添加到 gems 源即可安装它:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname

还是?我刚刚做了这个并且它确实有效......在将它添加到你的来源之前去 gems.github.com 我猜? (但不要使用 sudo)
@esharp,他们托管他们构建的那些,但他们不再构建它们。如果 gem 得到更新 since 2009,gems.github.com 副本将被废弃。
a
austinheiman

如果您从公共 GitHub 存储库获取 gem,可以使用简写

gem 'nokogiri', github: 'tenderlove/nokogiri'

C
Chuck Vose

你也可以做gem install username-projectname -s http://gems.github.com


已过时,请参阅其他答案的评论。
仍然帮助我解决旧代码库的问题。是的,它是 2013 年,我正在开发一个 rails 2.3.4 项目。
s
slal

在您的 Gemfile 中,添加以下内容:

gem 'example', :git => 'git://github.com/example.git'

您还可以添加 ref、branch 和 tag 选项,

例如,如果您想从特定分支下载:

gem 'example', :git => "git://github.com/example.git", :branch => "my-branch"

然后运行:

bundle install

O
OwilliwO

您还可以使用 rdp/specific_install gem:

gem install specific_install
gem specific_install https://github.com/capistrano/drupal-deploy.git

M
Mark Cheverton

如果您按照 gryzzly 的建议使用 bundler 进行安装,并且 gem 会创建一个二进制文件,那么请确保使用 bundle exec mygembinary 运行它,因为 gem 存储在 bundler 目录中,该目录在普通 gem 路径中不可见。


C
Community

在新的 Linux 机器上,您还需要安装 git。 Bundle 在幕后使用它。