2015-10-12 14 views
11

Sto eseguendo il debug di un problema in cui sto facendo lo sviluppo all'interno di un contenitore Docker, ma Jekyll non aggiorna correttamente i file statici HTML o CSS dopo la prima volta scritto. Ho aggiunto il seguente codice per static_file.rb dopo la linea 83:jekyll non sta aggiornando CSS statici, file HTML nel contenitore di sviluppo docker

sha256_src = Digest::SHA256.file path 
    sha256_dst = Digest::SHA256.file dest_path 

    fail "invalid file copy: #{path}/#{dest_path}" unless sha256_src == sha256_dst 

e vedo che il fail attivato perché l'hash non corrisponde. Invece, una versione precedente del file statico su path è stata copiata in dest_path. Ho pensato che stavo perdendo la testa, ma so che Docker usa file system a strati e quindi mi chiedo se sto colpendo qualche tipo di bug o problema noto.

Ci sono problemi noti con utilizzando le seguenti tecnologie in tandem con l'altro:

Ho dovuto lavorare intorno ad esso eseguendo il comando seguente:

cp s5/*.css _site/s5/ 
cp s5/*.html _site/s5/ 

Invece di avere il lavoro automaticamente per me con jekyll build.


Ecco come stanno collegando file all'immagine finestra mobile: la versione

export ABSPATH=$(cd "$(dirname "$0")"; cd ../; pwd) 
docker run -d --name static -t -i -p 4000:4000 -p 2422:22 --link static-db:db -v "$ABSPATH:/mnt/app" me/static:0.0.2 /sbin/my_init --enable-insecure-key 

Docker:

Client: 
Version:  1.8.3 
API version: 1.20 
Go version: go1.4.2 
Git commit: f4bf5c7 
Built:  Mon Oct 12 18:01:15 UTC 2015 
OS/Arch:  darwin/amd64 

Server: 
Version:  1.8.3 
API version: 1.20 
Go version: go1.4.2 
Git commit: f4bf5c7 
Built:  Mon Oct 12 18:01:15 UTC 2015 
OS/Arch:  linux/amd64 

Docker informazioni:

Containers: 10 
Images: 265 
Storage Driver: aufs 
Root Dir: /mnt/sda1/var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 285 
Dirperm1 Supported: true 
Execution Driver: native-0.2 
Logging Driver: json-file 
Kernel Version: 4.1.10-boot2docker 
Operating System: Boot2Docker 1.8.3 (TCL 6.4); master : af8b089 - Mon Oct 12 18:56:54 UTC 2015 
CPUs: 1 
Total Memory: 3.859 GiB 
Name: dev 
ID: ZY6F:2VSO:EDRL:TWYE:JAS6:5GC3:PPAO:TNA6:KCCB:HFLC:4IQB:5BYE 
Debug mode (server): true 
File Descriptors: 21 
Goroutines: 33 
System Time: 2015-10-18T18:36:20.08630971Z 
EventsListeners: 0 
Init SHA1: 
Init Path: /usr/local/bin/docker 
Docker Root Dir: /mnt/sda1/var/lib/docker 
Username: me 
Registry: https://index.docker.io/v1/ 
Labels: 
provider=virtualbox 

Sono in esecuzione questo è collegato a un volume su OSX.


Ecco una sessione interattiva che utilizza binding.pry all'interno di static_file.rb. Si può vedere che FileUtils.cp non funziona correttamente.

Nel passaggio 9-10 si può vedere sto richiamando manualmente il comando FileUtils::cp e l'hash del file risultante è aa75cd.... Provo persino a usare FileUtils.cp per copiare il mio file originale su un percorso file diverso senza successo. Tuttavia, nel passaggio 20-21, quando invoco il comando shell cp direttamente utilizzando cp, funziona e il file risultante ha l'hash corretto di 724707....

Parsing Haml layouts...done. 
Parsing Scss layouts...done. 
Configuration file: /mnt/app/_config.yml 
      Source: /mnt/app 
     Destination: /mnt/app/_site 
     Generating... 

From: /usr/local/lib/ruby/gems/2.2.0/gems/jekyll-2.5.3/lib/jekyll/static_file.rb @ line 92 Jekyll::StaticFile#write: 

    77: def write(dest) 
    78: dest_path = destination(dest) 
    79: 
    80: return false if File.exist?(dest_path) and !modified? 
    81: @@mtimes[path] = mtime 
    82: 
    83: FileUtils.mkdir_p(File.dirname(dest_path)) 
    84: FileUtils.rm(dest_path) if File.exist?(dest_path) 
    85: 
    86: FileUtils.cp(path, dest_path) 
    87: 
    88: sha256_src = Digest::SHA256.file path 
    89: sha256_dst = Digest::SHA256.file dest_path 
    90: 
    91: if sha256_src != sha256_dst 
=> 92:  binding.pry 
    93: end 
    94: puts "invalid file copy: #{path}/#{dest_path}" unless sha256_src == sha256_dst 
    95: 
    96: true 
    97: end 

[1] pry(#<Jekyll::StaticFile>)> path 
=> "/mnt/app/styles/scruff5.css" 
[2] pry(#<Jekyll::StaticFile>)> dest_path 
=> "/mnt/app/_site/styles/scruff5.css" 
[3] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file path 
=> #<Digest::SHA256: 72470716291c6fef0c8c2151a0d0997f0991396cda964ba48e3cbb65cc7f7908> 
[4] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file dest_path 
=> #<Digest::SHA256: aa75cd20ddf51b86ec2344002532f08891e05eb1a0a9f7e5f99d8fda05c5c920> 
[5] pry(#<Jekyll::StaticFile>)> dest_path 
=> "/mnt/app/_site/styles/scruff5.css" 
[6] pry(#<Jekyll::StaticFile>)> FileUtils.rm(dest_path) 
=> ["/mnt/app/_site/styles/scruff5.css"] 
[7] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file dest_path 
Errno::ENOENT: No such file or directory @ rb_sysopen - /mnt/app/_site/styles/scruff5.css 
from /usr/local/lib/ruby/2.2.0/digest.rb:49:in `initialize' 
[8] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file path 
=> #<Digest::SHA256: 72470716291c6fef0c8c2151a0d0997f0991396cda964ba48e3cbb65cc7f7908> 
[9] pry(#<Jekyll::StaticFile>)> FileUtils.cp(path, dest_path) 
=> nil 
[10] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file dest_path 
=> #<Digest::SHA256: aa75cd20ddf51b86ec2344002532f08891e05eb1a0a9f7e5f99d8fda05c5c920> 
[11] pry(#<Jekyll::StaticFile>)> dest_path 
=> "/mnt/app/_site/styles/scruff5.css" 
[12] pry(#<Jekyll::StaticFile>)> dest_path = dest_path + '-2' 
=> "/mnt/app/_site/styles/scruff5.css-2" 
[13] pry(#<Jekyll::StaticFile>)> FileUtils.cp(path, dest_path) 
=> nil 
[14] pry(#<Jekyll::StaticFile>)> FileUtils.cp(path, dest_path) 
=> nil 
[15] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file dest_path 
=> #<Digest::SHA256: aa75cd20ddf51b86ec2344002532f08891e05eb1a0a9f7e5f99d8fda05c5c920> 
[16] pry(#<Jekyll::StaticFile>)> (Digest::SHA256.file dest_path).hexdigest 
=> "aa75cd20ddf51b86ec2344002532f08891e05eb1a0a9f7e5f99d8fda05c5c920" 
[17] pry(#<Jekyll::StaticFile>)> (Digest::SHA256.file path).hexdigest 
=> "72470716291c6fef0c8c2151a0d0997f0991396cda964ba48e3cbb65cc7f7908" 
[18] pry(#<Jekyll::StaticFile>)> FileUtils.rm dest_path 
=> ["/mnt/app/_site/styles/scruff5.css-2"] 
[19] pry(#<Jekyll::StaticFile>)> dest_path = '/mnt/app/_site/styles/scruff5.css' 
=> "/mnt/app/_site/styles/scruff5.css" 
[20] pry(#<Jekyll::StaticFile>)> `cp #{path} #{dest_path}` 
=> "" 
[21] pry(#<Jekyll::StaticFile>)> Digest::SHA256.file dest_path 
=> #<Digest::SHA256: 72470716291c6fef0c8c2151a0d0997f0991396cda964ba48e3cbb65cc7f7908> 
[22] pry(#<Jekyll::StaticFile>)> 
+1

Come stai aggiungendo i tuoi file al contenitore/immagine? Come è costruito? Puoi aggiungere l'output di 'docker version' e' docker info'? – thaJeztah

+0

@thaJeztah ha aggiornato la mia risposta e ha incluso una sessione di binding.pry interattiva più sconcertante ... – esilver

+0

Hai provato a lanciare il server jekyll localmente, al di fuori della finestra mobile? La tua taglia dice che il jekyll non può più "copiare" i file statici. Quali modifiche hai apportato al tuo sito, jekyll config o all'ambiente? – onebree

risposta

3

Dopo aver fatto l'analisi di cui sopra e la determinazione che [FileUtils.cp][1] sembrava essere alla radice di questo problema, ho declassato da Ruby 2.2.1 a Ruby 2.1.7p400, e questo problema ora sembra essere corretti. Sembrerebbe che Ruby 2.2.1 abbia una regressione seria potenzialmente nella versione FileUtils.

Problemi correlati