我正在尝试将 gem 推送到托管的 Artifactory,并且在每一步都遇到问题。
我的环境是:
- 操作系统:Windows 7 x64 Professional
- ruby : ruby 1.9.3p545
我不得不使用 cacert.pem 来将人工 url 添加到我的源列表中,但那部分现在可以正常工作了。下一步Artifactory documentation是获取一个 api key 并将其通过管道传输到 ~/.gem/credentials。
当我这样做时,api key 下载成功,但 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.
这是专有的 gem,因此不能发布到 rubygems.org。我的环境似乎确实存在问题,但我一直无法弄清楚它是什么——而且其他关于 SO 问题的文档似乎都不是重点。
我知道我需要让 gem 读取凭证文件才能成功推送,但 gem 忽略 --host 参数似乎是一个更基本的问题。
最佳答案
这花了很多功夫,但我想我已经解决了我的问题。这是两个部分的问题。
解决方案第 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。
关于ruby - 将 Gem 推送到托管的认证提要失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171821/