Если вы работаете в Mac OS X, вы можете установить пакет ca-cert-bundle с помощью homebrew
:
$ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt
Формула устанавливает пакет сертификатов в вашу общую папку. via:
share.install 'ca-bundle.crt'
Метод share
является просто псевдонимом /usr/local/share
, а curl-ca-bundle предоставляется в Mozilla
. Это то, на что вы видите ссылки во многих вопросах. Надеюсь, что это поможет, поскольку не совсем понятно, как подойти к этому на Mac OS X. brew install curl
тоже не принесет вам много пользы, так как это только бочонок и не будет связан (работает which curl
всегда будет выводить /usr/bin/curl
, что по умолчанию поставляется с вашей ОС). Этот пост также может иметь некоторую ценность .
Вам, конечно, нужно будет отключить SSL перед установкой homebrew
, так как это git-репо. Просто делайте то, что говорит curl, когда происходит ошибка во время проверки SSL, и:
$ echo insecure >> ~/.curlrc
Как только вы установите homebrew
вместе с curl-ca-bundle
, удалите .curlrc
и попробуйте клонировать репо на github. Убедитесь, что ошибок нет, и вам будет хорошо.
ПРИМЕЧАНИЕ: Если вы прибегаете к .curlrc
, удалите его из системы, как только вы закончите тестирование. Этот файл может вызвать серьезные проблемы, поэтому используйте его во временных целях и с осторожностью. brew doctor
будет жаловаться, если вы забудете удалить его из своей системы).
ПРИМЕЧАНИЕ: Если вы обновите свою версию git, вам нужно будет повторно запустить эту команду, так как настройки вашей системы будут стерты (они сохраняются относительно двоичного файла git в зависимости от версии). [тысячу сто сорок одна]
Итак, после запуска:
$ brew update
$ brew upgrade
Если вы получите новую версию git, просто перезапустите:
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt
И все будет готово.
Наконец, если у вас есть новая версия git, выполните:
$ git config -l --system
должно выдать вам ошибку в соответствии с
fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'
это ваша совет, который нужно указать git, где находится пакет Mozilla.
ОБНОВЛЕНИЕ:
.curlrc
может или не может быть решением вашей проблемы. В любом случае, просто установите пакет Mozilla, установленный на вашем компьютере, независимо от того, нужно ли вам загружать его вручную или нет. Вот что здесь важно. Как только вы получите пакет, вы готовы. Просто запустите команду git config и укажите git на пакет ca.
ОБНОВЛЕНИЕ
Мне недавно пришлось добавить:
export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt
в мой файл точек .zshenv
, так как я использую zsh
. опция git config
работала в большинстве случаев, но при использовании github по SSL (например, rvm get stable
) я все еще сталкивался с проблемами сертификатов. @Maverick указал на это в своем комментарии, но на тот случай, если кто-то пропустит это или предположит, что ему не обязательно экспортировать эту переменную среды в дополнение к выполнению команды git config --system....
. Спасибо и надеюсь, что это поможет.
ОБНОВЛЕНИЕ
Похоже, что curl-ca-bundle был недавно удален из доморощенного . Здесь есть рекомендация .
Вы хотите добавить некоторые файлы в:
$(brew --prefix)/etc/openssl/certs
Определите экстрактор
object Int {
def unapply(s : String) : Option[Int] = try {
Some(s.toInt)
} catch {
case _ : java.lang.NumberFormatException => None
}
}
Ваш примерный метод
def getValue(s: String): Int = s match {
case "inf" => Integer.MAX_VALUE
case Int(x) => x
case _ => error("not a number")
}
И используя его
scala> getValue("4")
res5: Int = 4
scala> getValue("inf")
res6: Int = 2147483647
scala> getValue("helloworld")
java.lang.RuntimeException: not a number
at scala.Predef$.error(Predef.scala:76)
at .getValue(<console>:8)
at .<init>(<console>:7)
at .<clinit>(<console>)
at RequestResult$.<init>(<console>:4)
at RequestResult$.<clinit>(<console>)
at RequestResult$result(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Na...
def getValue(s: String): Int = s match {
case "inf" => Integer.MAX_VALUE
case _ => s.toInt
}
println(getValue("3"))
println(getValue("inf"))
try {
println(getValue("x"))
}
catch {
case e => println("got exception", e)
// throws a java.lang.NumberFormatException which seems appropriate
}