jekyll没有在docker开发容器中更新静态CSS,HTML文件

时间:2015-10-12 23:53:13

标签: ruby docker jekyll

我正在调试我在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使用的是分层文件系统,所以我想知道我是否遇到了某种bug或已知的问题。

使用以下技术是否存在任何已知问题:

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

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

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

以下是我将文件链接到docker镜像的方法:

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将原始文件复制到不同的文件路径,但没有成功。但是,在步骤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>)> 

1 个答案:

答案 0 :(得分:3)

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