Jekyll plugin not working - plugins

I have developed a simple Jekyll plugin, to generate the categories pages. IT works fine on my local system but does not work on github site.
Here is the source of the plugin:
https://github.com/madhur/madhur.github.com/blob/master/_plugins/site_process.rb
It should generate a page such as this:
http://www.madhur.co.in/categories/Security.html
However its not generated. Any ideas?

GitHub doesn't allow Jekyll plugins, turns out we don't want you running arbitrary code on our servers :)

I think this answer from Andión is better.
You can just upload the contents of the _site folder. That way you will simply push the static site. A simple way of doing that would be moving your .git/ folder to the _site folder, committing and pushing those changes. After that you will generate your site as usual and then push the changes to github from the _site folder. – Andión

Related

Force github pages to use _site folder

I have a github pages website. I need to use the jekyll-pagniation-v2 gem, but github pages only support v1. Thus I'm compiling the site locally and pusing up the entire _site directory to my github repo.
My understanding is that it should use what I've pushed in the _site dir, which looks fine locally. When I view the live site the index page doesn't contain any of the posts. As if it tried to rebuild the site and failed to find any posts because it's using the wrong pagination version.
How can I ensure github pages is not rebuulding the site and is using the version of the site I pushed to _site
The issue was that it wasn't actually pushing changes to the right branch and i'm an idiot.

Why put the _site-directory of a Jekyll site in .gitignore?

The documentation of Jekyll tells me, that the _site-directory of a Jekyll site contains the compiled version of the site I have created after running
Jekyll build
Several articles recommend, that I include the _site-directory in my .gitignore-file because "it just contains the compiled version of my site". (that's what some articles recommend. So, I am not sure if I don't understand some concept of Jekyll or some concept of Git.
If the _site-directory contains the compiled version of a site, shouldn't that be the thing that is on the server the provides the final website? I do understand why you put source code on github and what to do with it, but in the case of github pages, Github is not a versioning system but a file hosting system and the file hosting system should host compiled versions of my work to provide it via MyUsername.github.io to users, right?
My question is: shouldn't it be only the _site-directory of my Jekyll website that I deploy to Github because that should be the compiled source code that github provides to users? So, shouldn't I put anything else in the .gitignore-file EXCEPT the _site-directory?
If I got this all wrong: what is the point in compiling my website via
Jekyll build
if I don't use the compiled source code for anything?
Two solutions :
You don't use Jekyll plugins (or only those supported by github pages)
You build your site only if you need to test it locally (jekyll build or jekyll serve). The generated code (in _site) will not be versioned as github pages will generate pages from the sources.
Put _site to .gitignore
Push you sources to github pages
You use Jekyll plugins
In this case, you need to build locally because Github pages cannot do the job with plugins.
Jekyll build locally
Put _site to .gitignore
commit your sources in one branch
commit your _site in another branch
See this post for more explanations.
I think the point where you are confused is that most of the tutorials talk about at least two different repositories.
the source code of your site, this is where you call Jekyll build
the compiled result, this is the one where you put the contents of the _site directory
Then it makes sense to ignore _site in case 1. out of the same reason you normally ignore compilation results: they are not meant to be tracked because they might change between every compilation without changing the source, so you would have to commit after every build although nothing (visible) has changed.
For repository 2. you of course have to update it with the contents of _site from repository 1 after your build.
Having said that you can of course combine 1. and 2. into a single repository by using master for the contents of _site and another branch e.g. source for the project with the Jekyll build files, here ignoring _site and then updating the master branch with the contents of it after changes.
the _site folder is cleared and all files inside are re-generated upon each "jekyll build". tracking a file that is to be removed seems to serve no useful purposes.
if you are thinking to git push your jekyll site to your github repo as a project page (gh-pages), the _site folder again serves no purposes as the jekyll installation at github will generate the _site for you automatically upon your files upload (git push).
the _site folder is useful only for local preview of your jekyll site (typically to be found at localhost:4000 by default).
I believe you might be looking at things the wrong way, It makes sense to ignore _site since every time you jekyll build your _site gets blasted, everything in there gets erased and written again.
So in my own opinion what you would like to push to github is the working directory since it's there where you work and all your changes are being versioned... with the plus of github doing the compiling and automatically building the site.
That being said, I usually keep _site out of my gitignore since I deploy to another hosting service and my deployment framework grabs the github repository and deploys from a particular branch I need the _site to be there.

how to serve my own gitbook using github pages

I've created my own gitbook. looks good locally.
but how shall I integrate it into my github pages? Similar issues here difficulty-in-getting-gitbook-site-to-show-up-in-github-page
I tried that approach as well, but I have problem setting the grunt up, and I also I would like to do that myself before using an integrated tool.
I tried to copy the generated _book folder to my github page folder, but that didn't workout as there are some encoding issues
Similar question here
I had this question because I don't understand github pages, the underlying steps involve
build the _book folder, this is the static content that will be served
create gh-pages branch copy the _book folder content into gh-pages
github will then serve the content
the command gitbook publish will finish all 3 steps. but I am not familiar with grunt as well , as npm install . is a pre-step.

Simplest way to get (jekyll-scholar) plugins on gh-pages

GitHub pages does not support plugins, but plugins are clearly very useful (e.g. jekyll-scholar).
Nitrous.io supports adding plugins to your GH pages site, but this seems a little involved. Is there any simply way to get plugins working on my github site, or should I just make _site/ the root, as the jekyll-scholar dev. recommends?
The method described in the Nitrous.io blog post can actually be used with a local Ruby/Rails environment, which removes some of the complexity. There's an even more convenient Rakefile setup from David Ensinger that implements the deployment steps proposed by Randy Morris.
Essentially, these Rakefiles are just conveniences to batch the deployment of both your Jekyll source (with plugins) and compiled _site to GitHub Pages as the jekyll-scholar dev recommends. Since your site is a User Pages (username.github.io), then you'll want your compiled _site to end up in Master, and your Jekyll source with plugins in a separate Source branch. If you want to first experiment with a Project Page, then you'll want your _site to end up in the gh-pages branch (which can be accomplished with this Rakefile)

How to save both my _site and jekyll build on github

Right now i have the following setup:
My jeyll build is in ~/jekyll-sites
My .git folder is in ~/jekyll-sites/_site
I'm now able to sync the jekyll generated ~/jekyll-sites/_site with my repo at: https://github.com/nielsrasmus/nielsrasmus.github.io
and it works perfect.
But i would also like to to save the whole jekyll build on github.
The question is:
Is it possible to make another repo called: nielsrasmus.github.io-source and sync the whole jekyll build here?
If so, what would be the best way to do it?
I've looked at so many answers that does not quite match what I want. So I'm pretty confused right now :-/
As long as you're not using any Jekyll plugins, you can actually push your Jekyll source to Github, and their servers will automatically generate the _site folder and serve it for you. You won't see this _site directory show up in your repository, but the generated files will be accessible from http://nielsrasmus.github.io
A great reference for how to do this is Tom Preston-Warner's personal blog, which is (naturally) hosted on Github Pages. Note that he placed the _site directory in his .gitgnore file, and Jekyll says "it's probably a good idea" for you to do the same, but you might be able to skip this part.
Both you and Tom are using the User Pages option, so your site gets generated as long as your content is in the Master branch (if you were using Project pages, it would use the gh-pages branch instead).
I think I solved the issue.
I installed the mac version of github and fiddled around, read a lot of man pages and finally I could make it happen :-)
What helped me was to click on the + sign in the bottom of the screen, as shown on the screenshot. Here I could point my repos at a local dir.
nielsrasmus/jekyll-sites: points to the root of the jekyll build.
nielsrasmus/nielsrasmus.github.io: points to the generated site at ~/jekyll-sites/_site