jekyll不更新docker开发容器中的静态CSS,HTML文件

我正在debugging一个问题,我正在做一个Docker容器的开发,但是Jekyll在第一次写入静态HTML或CSS文件之后没有正确地更新。 我在第83行后面添加了以下代码到static_file.rb

  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 

而且我看到由于哈希不匹配而触发的失败。 相反, path上的旧版本的静态文件已被复制到dest_path 。 我以为我失去了我的想法,但我知道Docker使用分层文件系统,所以我不知道我是否遇到某种错误或已知问题。

是否有任何已知的问题相互使用以下技术:

  • 杰奇
  • Docker容器
  • Linux容器
  • FileUtils cp方法
  • Ruby 2.2.3p173

我必须通过运行以下命令来解决它:

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

而不是让它与jekyll build自动工作。


以下是我如何将我的文件链接到泊坞窗图像:

 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信息:

 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 

我正在运行这个链接到OSX上的卷。


这是一个在static_file.rb中使用binding.pry的交互式会话。 你可以看到FileUtils.cp工作不正常。

在步骤9-10中可以看到我手动调用FileUtils::cp命令,生成的文件哈希是aa75cd... 我甚至尝试使用FileUtils.cp将我的原始文件复制到不同的文件path,但没有成功。 但是,在步骤20-21中,当我直接使用cp调用shell cp命令时,它工作并且生成的文件具有适当的散列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>)> 

在做了上面的分析,并确定[FileUtils.cp][1]似乎是这个问题的根源,我从Ruby 2.2.1降级到Ruby 2.1.7p400,这个问题现在似乎得到纠正。 看来Ruby 2.2.1在FileUtils有一个潜在的版本严重的回归。