Hi all,
I have a situation where there is an existing website, http://example.com
and I need to put a new Jekyll blog in http://example.com/blog
.
I have been previewing my blog using jekyll build; jekyll serve
and the blog appears at http://127.0.0.1:4000/
(and http://localhost:4000
also works).
I know that the blog is generated into the _site
folder by default. The Jekyll tutorials (e.g. this one) say that the _site
folder is used as a “staging area” where I can then copy it over to the server.
I have tried copying over the _site
folder into where http://example.com
is located. I put it inside a new folder, blog
inside the directory where the other files are stored for this website. However, the problem is that the links are not working. For instance, I’ve had to go through a lot of files and replace:
- Replace
/
with/blog/
- Replace
http://localhost:4000
with/blog
This seems too manual. I could do this with a script, but it’s also a bit hacky and it’s hard to figure out how to do the first replacement, since I don’t know how to clearly describe when /
should be replaced with /blog/
.
My question: when generating the site locally, how can I automatically get the _site
folder to include the correct links, so that getting it deployed and located in http://example.com/blog
is as simple as copying the _site
folder? I know there are baseurl
, url
, and similar arguments in the _config.yml
files. Unfortunately, I’ve tried modifying those but still, http://localhost:4000
constantly appears in the URLs when I build locally. For instance, when I assign baseurl: "/blog"
, the website is generated in http://127.0.0.1:4000/blog/
but the _site
folder still includes http://localhost:4000
inside its links (which turn out to be http://localhost:4000/blog
but that’s not the behavior I need…) which requires me to manually (or maybe programmatically) delete that.
I appreciate any assistance, and also let me know if there are tutorials about this that I can read. The most relevant one seems to be the deployment methods but the only thing I seem to learn from that is to copy over the _site
folder like I’ve been doing.
EDIT 1: to be clear on how I’m copying things over, let’s suppose the website lives in the directory /project/www-ex
on some computer/server. This www-ex
directory contains a bunch of files (e.g. html ones) that show up on http://example.com
and http://example.com/other_pages_here
. What I tried to do is copy _site
into a new directory /project/www-ex/blog
where now, blog
is the directory which contains the contents of _site
files describing the Jekyll blog.
EDIT 2: I tried following the advice here to change the URL with the production environment, but I seem to get:
$ JEKYLL_ENV=production bundle exec jekyll build
Could not locate Gemfile or .bundle/ directory
This must be because I’m using a blog with an older version of jekyll even though my current version is 3.4.3.