【问题标题】:Jekyll not processing plugins on serverJekyll 不处理服务器上的插件
【发布时间】:2012-07-07 21:52:08
【问题描述】:

Jekyll 正在我的本地机器(OS X 10.7.4,ruby 1.9.3)上处理我的 _plugins 文件夹,但它没有在服务器上处理它们(Ubuntu 12.04,ruby 1.9.3)。两者都安装了相同版本的 Jekyll (0.11.2)。

我正在尝试使用 generate_sitemap 插件,here

我正在通过 git 和 post-receive 挂钩进行部署,如下所示:

#!/bin/bash -l

GIT_REPO=/my_repo.git
TMP_GIT_CLONE=/my_temp_folder/
PUBLIC_WWW=/my_public_folder/

git clone $GIT_REPO $TMP_GIT_CLONE
jekyll --no-auto $TMP_GIT_CLONE $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit

我在部署时看到此错误:

remote: /home/ed/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': iconv will be deprecated in the future, use String#encode instead.

但是,根据我的阅读,这是一个 Maruku 警告,与插件无关。

有人对我可以尝试解决的问题有任何想法吗?我有点不知所措。

【问题讨论】:

  • 后续问题:1)如果你直接在服务器上通过命令行运行jekyll,插件能用吗?如果是这样,它可能是 bash 脚本试图运行它的方式。 2)您是否尝试过另一个插件以查看它是否有效?想法是,如果另一个插件在服务器上工作,它将帮助您缩小不工作的细节。
  • 好主意。当直接从服务器上的命令行运行时,插件正在工作。所以它一定是那个脚本中的东西。但我不确定它可能是什么。脚本没有做任何特别复杂的事情。
  • 我需要稍微修改该响应。如果我 git clone 一个存储库到一个目录,然后 cd 到那个目录,然后运行'jekyll',插件就可以工作了。但是,如果我将存储库 git 克隆到目录中,然后运行“jekyll /my_tmp/ /my_public/”,则不会处理插件。因此,如果您将目录作为参数提供,那么 jekyll 命令中的某些内容将无法处理插件。
  • 奇数。一种选择是尝试使用相对路径而不是从根开始的路径(即不以“/”开头)。另一种选择是在 bash 脚本中添加“cd /full/path/to/jekyll/source”行,看看是否可行。如果是这样,您可能必须将目标目录移动到 _config.yml 文件中。 (github.com/mojombo/jekyll/wiki/Configuration)
  • 我认为这不是一个好的解决方案,因为它会破坏本地服务器上的插件,但是:如果将 _config.yml 中的 plugins 变量设置为插件临时所在的路径在服务器上构建站点时,插件将在服务器上运行。在我的情况下:'插件:/my_temp_folder/_plugins'。也许这是 Jekyll 中的错误或限制?谢谢你的帮助,艾伦。

标签: plugins jekyll


【解决方案1】:

用 Jekyll 很难调试,但它是一个很棒的工具!!!

我假设您的 _plugins 文件夹中有多个插件。

所以可能是你的一个或一些插件导致了问题。

如果我是对的,您可以执行以下操作:

  • 杀死你的 Jekyll
  • 在其他位置(不在 _plugins 中)创建插件的备份 文件夹)。
  • 在您的 _plugins 文件夹中只保留一个插件并启动 Jekyll。
  • 如果有效,请将另一个插件复制到 _plugins 文件夹,直到您 找到在 Jekyll 中失败的那个。

找到后,您可以将调试打印输出添加到有问题的插件中(这就是我所做的)。

类似的东西: 把“放在……之前”

我仅使用 Jekyll 构建了 http://www.cloudifysource.org/,您可以在我们的 GitHub 存储库中找到并使用我们的许多有用示例:https://github.com/CloudifySource/cloudifysource.github.com

【讨论】:

    【解决方案2】:

    当从 post-receive 挂钩调用 Jekyll 时,我遇到了同样的问题。

    正如上面 cmets 中提到的,将当前工作目录更改为 $TMP_GIT_CLONE 就可以了。

    您不必更改 _config.yml 中的任何内容。

    #!/bin/bash -l
    
    GIT_REPO=/my_repo.git
    TMP_GIT_CLONE=/my_temp_folder/
    PUBLIC_WWW=/my_public_folder/
    
    git clone $GIT_REPO $TMP_GIT_CLONE
    cd $TMP_GIT_CLONE                             # move to the temp dir
    jekyll --no-auto $TMP_GIT_CLONE $PUBLIC_WWW
    cd                                            # move back to allow deletion
    rm -Rf $TMP_GIT_CLONE
    exit
    

    这是一个真正令人头疼的问题,因为 git 用户工作得很好,所以手动执行原始的 post-receive 钩子......无论如何,Jekyll 现在正在我的服务器上加载插件,希望这是一个正确的答案将帮助其他人找到这个解决方案。

    【讨论】:

      【解决方案3】:

      最近,我开始使用 jekyll 构建 https://github.com/alswl/code-standards-jekyll。 我在_plugins写了两个插件,发现很难调试。

      一开始我是用puts "balabala"调试的,好像还可以。但是遇到了_site文件夹没有生成任何东西的问题,并且控制台中没有'balabala',我就慌了.

      阅读jekyll源码后,我尝试在_config.yml中设置auto=false,运行jekyll会产生一些调试跟踪堆栈错误。谢天谢地。

      所以,ues auto=false 将帮助您调试插件。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 2013-05-06
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多