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

jekyll not updating static CSS, HTML files in docker development container

我正在调试一个问题,我在第 83 行之后的 Docker container, but Jekyll is not properly updating static HTML or CSS files after the first time it has been written. I have added the following code to 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 使用分层文件系统,所以我想知道我是否遇到了某种错误或已知问题。

将以下技术相互串联使用是否存在任何已知问题:

我不得不通过 运行 以下命令来解决它:

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

而不是让它自动为我工作jekyll build


以下是我如何将我的文件链接到 docker 图片:

export ABSPATH=$(cd "$(dirname "[=15=]")"; 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 将我的原始文件复制到不同的文件路径,但没有成功。但是,在步骤 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.

中有潜在的版本严重回归