Introduce distinction between preview/productive site generation
| ... | ... |
@@ -59,7 +59,7 @@ task :watch do |
| 59 | 59 |
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir) |
| 60 | 60 |
puts "Starting to watch source with Jekyll and Compass." |
| 61 | 61 |
system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
|
| 62 |
- jekyllPid = Process.spawn("jekyll --auto")
|
|
| 62 |
+ jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll --auto")
|
|
| 63 | 63 |
compassPid = Process.spawn("compass watch")
|
| 64 | 64 |
|
| 65 | 65 |
trap("INT") {
|
| ... | ... |
@@ -75,7 +75,7 @@ task :preview do |
| 75 | 75 |
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir) |
| 76 | 76 |
puts "Starting to watch source with Jekyll and Compass. Starting Rack on port #{server_port}"
|
| 77 | 77 |
system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
|
| 78 |
- jekyllPid = Process.spawn("jekyll --auto")
|
|
| 78 |
+ jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll --auto")
|
|
| 79 | 79 |
compassPid = Process.spawn("compass watch")
|
| 80 | 80 |
rackupPid = Process.spawn("rackup --port #{server_port}")
|
| 81 | 81 |
|
| ... | ... |
@@ -200,6 +200,13 @@ end |
| 200 | 200 |
|
| 201 | 201 |
desc "Default deploy task" |
| 202 | 202 |
task :deploy do |
| 203 |
+ # Check if preview posts exist, which should not be published |
|
| 204 |
+ if File.exists?(".preview-mode")
|
|
| 205 |
+ puts "## Found posts in preview mode, regenerating files ..." |
|
| 206 |
+ File.delete(".preview-mode")
|
|
| 207 |
+ Rake::Task[:generate].execute |
|
| 208 |
+ end |
|
| 209 |
+ |
|
| 203 | 210 |
Rake::Task[:copydot].invoke(source_dir, public_dir) |
| 204 | 211 |
Rake::Task["#{deploy_default}"].execute
|
| 205 | 212 |
end |
| 206 | 213 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,48 @@ |
| 0 |
+# Monkeypatch for Jekyll |
|
| 1 |
+# Introduce distinction between preview/productive site generation |
|
| 2 |
+# so posts with YAML attribute `published: false` can be previewed |
|
| 3 |
+# on localhost without being published to the productive environment. |
|
| 4 |
+ |
|
| 5 |
+module Jekyll |
|
| 6 |
+ |
|
| 7 |
+ class Site |
|
| 8 |
+ # Read all the files in <source>/<dir>/_posts and create a new Post |
|
| 9 |
+ # object with each one. |
|
| 10 |
+ # |
|
| 11 |
+ # dir - The String relative path of the directory to read. |
|
| 12 |
+ # |
|
| 13 |
+ # Returns nothing. |
|
| 14 |
+ def read_posts(dir) |
|
| 15 |
+ base = File.join(self.source, dir, '_posts') |
|
| 16 |
+ return unless File.exists?(base) |
|
| 17 |
+ entries = Dir.chdir(base) { filter_entries(Dir['**/*']) }
|
|
| 18 |
+ |
|
| 19 |
+ # first pass processes, but does not yet render post content |
|
| 20 |
+ entries.each do |f| |
|
| 21 |
+ if Post.valid?(f) |
|
| 22 |
+ post = Post.new(self, self.source, dir, f) |
|
| 23 |
+ |
|
| 24 |
+ # Monkeypatch: |
|
| 25 |
+ # On preview environment (localhost), publish all posts |
|
| 26 |
+ if ENV.has_key?('OCTOPRESS_ENV') && ENV['OCTOPRESS_ENV'] == 'preview' && post.data.has_key?('published') && post.data['published'] == false
|
|
| 27 |
+ post.published = true |
|
| 28 |
+ # Set preview mode flag (if necessary), `rake generate` will check for it |
|
| 29 |
+ # to prevent pushing preview posts to productive environment |
|
| 30 |
+ File.open(".preview-mode", "w") {}
|
|
| 31 |
+ end |
|
| 32 |
+ |
|
| 33 |
+ if post.published && (self.future || post.date <= self.time) |
|
| 34 |
+ self.posts << post |
|
| 35 |
+ post.categories.each { |c| self.categories[c] << post }
|
|
| 36 |
+ post.tags.each { |c| self.tags[c] << post }
|
|
| 37 |
+ end |
|
| 38 |
+ end |
|
| 39 |
+ end |
|
| 40 |
+ |
|
| 41 |
+ self.posts.sort! |
|
| 42 |
+ |
|
| 43 |
+ # limit the posts if :limit_posts option is set |
|
| 44 |
+ self.posts = self.posts[-limit_posts, limit_posts] if limit_posts |
|
| 45 |
+ end |
|
| 46 |
+ end |
|
| 47 |
+end |
|
| 0 | 48 |
\ No newline at end of file |