将Gem推向托管的Credentialed Feed失败

时间:2014-08-06 23:15:57

标签: ruby windows gem artifactory

我正在尝试将宝石推向托管的Artifactory,并在每一步都遇到问题。

我的环境是:

  • 操作系统:Windows 7 x64 Professional
  • Ruby:ruby 1.9.3p545

我不得不用cacert.pem做一个技巧,将神器网址添加到我的源列表中,但这部分现在正在运行。 Artifactory documentation中的下一步是获取api密钥并将其传递给〜/ .gem / credentials。

当我这样做时,api密钥成功下载,但 gem 完全中断。

gem
C:/ruby193/lib/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError)
        from C:/ruby193/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
        from C:/ruby193/lib/ruby/1.9.1/psych.rb:151:in `parse'
        from C:/ruby193/lib/ruby/1.9.1/psych.rb:127:in `load'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:253:in `load_file'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:223:in `load_api_keys'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:208:in `initialize'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:78:in `new'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:78:in `do_configuration'
        from C:/ruby193/lib/ruby/site_ruby/1.9.1/rubygems/gem_runner.rb:51:in `run'

只要凭证文件存在,我甚至无法使用gem,所以我必须删除它。

如果我尝试在没有凭证文件的情况下推送并使用--host选项,gem似乎忽略了--host选项。

gem push .\my_gem-0.0.1.0.beta.gem --host $artifactory.source
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at http://rubygems.org/sign_up
   Email:
Password:
Pushing gem to https://rubygems.org...
HTTP Basic: Access denied.

这是一个专有的宝石,所以发布到rubygems.org不是一个选择。我的环境似乎确实存在问题,但我一直无法弄清楚它是什么 - 而且SO问题的其他文档似乎都没有问题。

我知道我需要获取gem来读取凭证文件才能成功推送,但这似乎是一个更基本的问题,即gem忽略了--host参数。

2 个答案:

答案 0 :(得分:2)

花了很多功夫,但我想我已经解决了我的问题。这是一个问题分为两部分。

解决方案第1部分

关于gem忽略--host选项的问题,这由updating gem.

解决

显然,Windows上附带ruby 1.9.3v545的gem版本已损坏。更新gem后,它的行为就像尝试上传到正确的URL一样。

解决方案第2部分

第二个问题涉及损坏的凭证文件。这里发生的事情是,当将curl命令的输出传递到凭证文件时,凭证文件将使用Unicode进行编码。为了解决这个问题,我使用了一个略有不同的curl命令(在powershell中)

curl $url | Out-File ~/.gem/credentials -Encoding "ASCII"

现在我可以成功上传gem。

答案 1 :(得分:0)

如果SSL_CERT_FILE环境变量技巧不起作用,您也可以尝试编辑.gemrc文件,如下所示:

:ssl_ca_cert: C:\\path\\to\\cacert.pem