事实证明,由于security concerns,自定义ruby插件在GitHub页面上不起作用。
我正在尝试将插件(this one)添加到Jekyll项目的_plugins
文件夹中,但是当我将其部署到GitHub时,它将被忽略。
问题:是否可以解决此问题?有没有人找到解决方案?
注意:很明显,我可以在本地生成html文件,并将它们提交到我的存储库中。但这不是我想要的。
答案 0 :(得分:4)
阅读时间脚本不需要插件。我创建了一个脚本集合,无需使用插件即可添加这些脚本。您可以找到它们here。 A reading time script是其中之一。
在这里找到代码:
{% capture words %}
{{ content | number_of_words | minus: 180 }}
{% endcapture %}
{% unless words contains '-' %}
{{ words | plus: 180 | divided_by: 180 | append: ' minutes to read' }}
{% endunless %}
请注意,此代码仅包含Liquid,不包含Ruby。因此,它可以用于您的布局或包含(无插件)中。
假设您有类似这样的内容:
<p>lorem ipsum</p>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
然后您可以像这样删除上面的代码块:
{% assign preprocessed_content=post.content | replace: '<p>', '__p__' %}
{% assign preprocessed_content=preprocessed_content | replace: '</p>', '__/p__' %}
{% assign truncated_content=preprocessed_content | strip_html %}
{% assign cleaned_content=truncated_content | replace: '__p__', '<p>' %}
{% assign cleaned_content=cleaned_content | replace: '__/p__', '</p>' %}
当然可以扩展以支持更多标签。
如果您真的要使用插件,则可以让您的本地计算机或CloudCannon构建您的站点并将结果推送到Github Pages。另请参阅:https://learn.cloudcannon.com/jekyll/using-jekyll-plugins/
答案 1 :(得分:1)
如果您想使用自定义插件,则必须在本地“构建”网站,然后将其作为HTML,CSS和其他文件(不再是Markdown文件)的集合自己部署到gh-pages
分支中)。您可能需要尝试jgd
命令行来帮助您自动完成所有操作。只需安装它,然后运行:
$ jgd
该站点将被打包,然后部署到您的仓库的gh-pages
分支中。在我的博客文章Deploy Jekyll to GitHub Pages
答案 2 :(得分:1)
如果您想使Jekyll网站像在本地一样运行,例如让自定义插件正常运行,这是一种真正方便的构建方式 Jekyll网站访问Github Pages。
?一个Github Action,可为GitHub Pages方便地部署Jekyll网站。 https://github.com/jeffreytse/jekyll-deploy-action
通过此操作,我认为您的问题可以得到完美解决。
答案 3 :(得分:0)
您需要这些插件的替代产品。
如“ Building a Series List with Hugo Shortcodes”中所述:
在Github页面上完全禁用了Ruby插件执行:
GitHub Pages上的插件GitHub Pages由Jekyll驱动。
但是,所有Pages网站都是使用-safe
选项生成的,出于安全原因禁用自定义插件。不幸的是,这意味着如果您要部署到GitHub Pages,插件将无法使用。您仍然可以使用GitHub Pages发布站点,,但是您需要在本地转换站点并将生成的静态文件而不是Jekyll源文件推送到GitHub存储库。 >
我了解您提到的内容:
很显然,我可以在本地生成html文件,并将它们提交到我的存储库中。但这不是我想要的。
仍然要考虑使用静态网站生成器(与GitHub页面兼容),例如 Hugo 。
R.J Lorimer添加:
雨果具有 Shortcodes 的概念,非常类似于Jekyll中的“液体标签”。
与Jekyll一样,您可以创建自定义的简码标签。但是,主要的区别在于,在Hugo中,您无需借助实际编写Go代码就可以创建它们-请参见Create Your Own Shortcodes。
由于Hugo使用Go模板来呈现页面,因此简码可以使用其中的所有Go模板函数以及为帮助而添加的自定义Hugo函数的完整列表。可以说它比液体模板解决方案更强大,但仍在可以轻松进行动态更新的模板文件中。
另外,雨果(Hugo)和support MathJax一样seen in this article。
2018年11月更新:带有Hugo 0.52的tweet confirms(引用this thread):
inline shortcode 与Jekyll允许您在Markdown中使用Liquid标签的方式
答案 4 :(得分:0)
如果您不是本地解决方案,因为它很耗时,则可以使流程自动化,以便在您将更改推送到master时它将自动在本地构建网站并将更改推送到gh-pages
分支。
您可以通过在仓库(pre-push
)中创建一个.git/hooks/pre-push
钩子来实现此目的,该钩子具有以下内容:
#!/bin/sh
# If any command fails in the bellow script, exit with error
set -e
# Set the name of the folder that will be created in the parent
# folder of your repo folder, and which will temporarily
# hold the generated content.
temp_folder="_gh-pages-temp"
# Make sure our main code runs only if we push the master branch
if [ "$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)" == "master" ]; then
# Store the last commit message from master branch
last_message=$(git show -s --format=%s master)
# Build our Jekyll site
jekyll build
# Move the generated site in our temp folder
mv _site ../${temp_folder}
# Checkout the gh-pages branch and clean it's contents
git checkout gh-pages
rm -rf *
# Copy the site content from the temp folder and remove the temp folder
cp -r ../${temp_folder}/* .
rm -rf ../${temp_folder}
# Commit and push our generated site to GitHub
git add -A
git commit -m "Built \`$last_message\`"
git push
# Go back to the master branch
git checkout master
else
echo "Not master branch. Skipping build"
fi
有关更多详细信息,请see my blog post。