From b8642cb3f01a696b9e3ddc83e2b088f8813e6ef6 Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Sun, 10 Mar 2024 08:53:33 -0300 Subject: [PATCH 1/2] Add ability to bind to any host, port For example: rake server[0.0.0.0,8888] --- Rakefile.rb | 5 +++-- packages/ruby/server/lib/server.rb | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Rakefile.rb b/Rakefile.rb index 66b369c..eed1e07 100644 --- a/Rakefile.rb +++ b/Rakefile.rb @@ -11,10 +11,11 @@ load "tasks/linter.rake" load "tasks/nanoc.rake" desc "Serve the website on localhost" -task :server do +task :server, [:host, :port] do |_t, args| require "server" build_dir = Ryo.from(YAML.load_file("./nanoc.yaml")).output_dir - s = Server.for_dir(build_dir) + h = args.to_h + s = Server.for_dir(build_dir, h.slice(:host,:port)) s.start(block: true) rescue Interrupt s.stop diff --git a/packages/ruby/server/lib/server.rb b/packages/ruby/server/lib/server.rb index 7fc34a7..f13581f 100644 --- a/packages/ruby/server/lib/server.rb +++ b/packages/ruby/server/lib/server.rb @@ -15,7 +15,13 @@ class Server end def self.for_dir(path, options = {}) - new(app(path), options) + host = options.delete(:host) || "127.0.0.1" + port = options.delete(:port) || 7777 + new app(path), options.merge!( + binds: ["tcp://#{host}:#{port}"], + tcp_host: host, + tcp_port: port + ) end def initialize(app, options = {}) @@ -39,9 +45,6 @@ class Server def default_options { - tcp_host: "127.0.0.1", - tcp_port: 7777, - binds: ["tcp://127.0.0.1:7777"], supported_http_methods: %w[GET HEAD], min_threads: 1, max_threads: 5, From e2702ded2553a8083877601bb827d0fe39886dbf Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Sun, 10 Mar 2024 08:54:42 -0300 Subject: [PATCH 2/2] Add src/favicon.ico --- Rakefile.rb | 2 +- nanoc/rules/assets.rules | 4 ++++ src/favicon.ico | Bin 0 -> 32038 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/favicon.ico diff --git a/Rakefile.rb b/Rakefile.rb index eed1e07..06c3aae 100644 --- a/Rakefile.rb +++ b/Rakefile.rb @@ -20,4 +20,4 @@ task :server, [:host, :port] do |_t, args| rescue Interrupt s.stop end -task default: "build" +task default: "nanoc:build" diff --git a/nanoc/rules/assets.rules b/nanoc/rules/assets.rules index be76d39..67edff6 100644 --- a/nanoc/rules/assets.rules +++ b/nanoc/rules/assets.rules @@ -28,6 +28,10 @@ compile "/images/opengraph/*.png" do write(item.identifier.to_s) end +compile "/favicon.ico" do + write(item.identifier.to_s) +end + ## # JSON passthrough "/durations/*/*.json" diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4d74de5ed98f804801e31c7b711707bc86de284f GIT binary patch literal 32038 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 literal 0 HcmV?d00001