2015-06-24 11 views
9

Come disabilitare cargo update o cargo build dal tentativo di accedere a github.com; ma ancora scaricare il pacchetto appropriato dalla crates.ioDisabilitare l'aggiornamento del registro nel carico

Ho un singolo dipendenza nel mio cargo.toml

[dependencies] 
chrono = "0.2.14" 

Esecuzione 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 

Siamo bloccati da github.com al lavoro, ma non casse.io. Esiste un'opzione in cui il carico può ancora scaricare i pacchetti di cui ha bisogno senza dover aggiornare il suo registro?

+4

"* bloccato da github.com al lavoro *". È davvero deprimente. – Shepmaster

+0

Parlamene. – Ronnie

+0

Qual è la natura del blocco? DNS, IP? –

risposta

12

Se si esamina la documentazione per configuring Cargo, si noterà che esiste una chiave index nella sezione [registry]. Questo può essere qualsiasi percorso verso un repository Git.

Come tale, è possibile creare un clone locale dell'indice crates.io. Ho verificato questo clonazione in questo modo:

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

quindi modifica la mia configurazione Cargo (in particolare, ho cambiato ~/.cargo/config, ma questo dovrebbe funzionare ovunque la documentazione descrive) per contenere:

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

Un paio di cose da notare:

  1. Questo non lo fa specchio il contenuto effettivo dei pacchetti. Quelli provengono da un ospite diverso. Non so come rispecchiare quelli, tuttavia: Cargo è molto meglio per la cache di quelli localmente. È dovrebbe essere sufficiente per pacchetti cargo fetch, quindi copiare i file memorizzati nella cache *.crate in $HOME/.cargo/registry/cache/*.

  2. Ciò causa la modifica degli identificativi del pacchetto nel file Cargo.lock. Questo non è un problema per lo sviluppo di librerie, ma è diventare un problema per i binari . La pratica standard consiste nel controllare il tuo Cargo.lock nel controllo del codice sorgente per i file binari in modo che tutti gli sviluppatori a valle eseguano esattamente le stesse versioni del pacchetto. Tuttavia, l'indice modificato indica che nessun altro sarà in grado di creare il pacchetto con quel file di blocco in posizione.

    Ho lavorato a questo problema inserendo un'altra configurazione sovrascrivendo all'interno di pacchetti binari che reimposta l'indice su quello "ufficiale", ma che potrebbe non essere nemmeno possibile nella situazione. In tal caso, potrebbe essere necessario escludere Cargo.lock dal controllo del codice sorgente o semplicemente avere un ramo "non usa il codice ufficiale".

+2

Oppure se puoi accedere a GitHub tramite indirizzo IP, forse puoi cambiarlo in 'https: // 192.30.252.131/rust-lang/crates.io-index.git'. Avrai però bisogno di 'GIT_SSL_NO_VERIFY = true' nel tuo ambiente, e questa è una cattiva idea. In alternativa, qualcosa come http://stackoverflow.com/a/3777141/497043. –

Problemi correlati