2015-06-24 4 views
9

Как отключить cargo update или cargo build от попытки доступа к github.com; но все-таки загрузить соответствующий пакет из crates.ioОтключить обновление реестра в Cargo

У меня есть один зависимость в моем cargo.toml

[dependencies] 
chrono = "0.2.14" 

Бег cargo build

E:\>cargo build 
    Updating registry `https://github.com/rust-lang/crates.io-index` 
Unable to update registry https://github.com/rust-lang/crates.io-index 

Мы блокировали от github.com на работе, но не ящики.io. Есть ли опция, когда груз может загружать нужные ему пакеты, не требуя обновления реестра?

+4

"* заблокирован от github.com на работе *". Это очень удручающе. – Shepmaster

+0

Расскажи мне об этом. – Ronnie

+0

Какова природа блока? DNS, IP? –

ответ

12

Если вы посмотрите на документацию для configuring Cargo, вы заметите, что в разделе [registry] есть index. Это может быть любой путь к репозиторию Git.

Таким образом, вы можете сделать локальный клон индекса crates.io. Я проверил это клонирование его следующим образом:

git clone --bare https://github.com/rust-lang/crates.io-index.git 

затем редактируется моя конфигурация Cargo (в частности, я изменил ~/.cargo/config, но это должно работать в любом месте документация описывает) содержу:

[registry] 
index = "file:///F:/Data/Repositories/crates.io-index.git" 

Несколько вещей отметить:

  1. Это не зеркала реального содержимого пакетов. Они происходят от другого хозяина. Однако я не знаю, как их отразить: Cargo намного лучше кэширует их локально. Это должно быть достаточно, чтобы cargo fetch пакетов, а затем скопировать файлы с кешем *.crate в $HOME/.cargo/registry/cache/*.

  2. Это приводит к изменению идентификаторов пакета в вашем файле Cargo.lock. Это не проблема для разработки библиотек, но это делает проблемой для двоичных файлов. Стандартная практика заключается в том, чтобы проверить ваш Cargo.lock на исходный элемент управления для двоичных файлов, чтобы все последующие сборки строились с одинаковыми версиями пакетов. Однако модифицированный индекс означает, что никто другой не сможет создать пакет с этим файлом блокировки.

    Я работал над этим, поместив еще один config переопределить в бинарных пакетах, который сбрасывает индекс на «официальный», но это может быть даже не возможно в вашей ситуации. В этом случае вам может потребоваться либо исключить Cargo.lock из источника управления, либо просто иметь ветвь «не использует официальный индекс».

+2

Или если вы можете получить доступ к GitHub по IP-адресу, возможно, вы можете изменить его на 'https: // 192.30.252.131/rust-lang/crates.io-index.git'. Однако вам понадобится 'GIT_SSL_NO_VERIFY = true' в вашей среде, и это плохая идея. Альтернативно, что-то вроде http://stackoverflow.com/a/3777141/497043. –

 Смежные вопросы

  • Нет связанных вопросов^_^