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:4000with/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.