我们如何在Jekyll配置文件中使用环境变量?

时间:2016-04-26 13:31:12

标签: ruby bash jekyll

我可以在Jekyll的$FOO文件中使用一个我的bash环境变量(比如_config.yml)吗?

我尝试过使用:

foo = <%= ENV['FOO'] %>

但它没有工作,因为Ruby代码没有被解释。

使用的版本:

  • Ruby:2.1.2
  • Jekyll:2.5.3

6 个答案:

答案 0 :(得分:1)

@elryco的回答很接近但不太正确,至少对我的设置而言。它花了一些试验和错误,但这终于奏效了。

Bash环境(例如~/.bash_profile):

export CONTENTFUL_ACCESS_TOKEN=foo
export CONTENTFUL_SPACE_ID=bar

_config.yml中,将其引用为:

contentful:
  spaces:
    - example:
        space:        ENV_CONTENTFUL_SPACE_ID
        access_token: ENV_CONTENTFUL_ACCESS_TOKEN

这与Github documentation中的内容相同。

答案 1 :(得分:1)

我最近不得不尝试自己做。事实证明你不能将环境变量直接放入Jekyll配置文件中,但你可以编写一个rake任务,它将获取环境变量并将它们应用到你的配置中。

以下是一个例子:

# Rakefile

require 'jekyll'

task default: %w[build]

desc "Build the site"
task :build do
  config = Jekyll.configuration({
    url: ENV["SITE_URL"],
  })
  site = Jekyll::Site.new(config)
  Jekyll::Commands::Build.build(site, config)
end

答案 2 :(得分:0)

不幸的是,没有直接的方法可以在液体标签中访问它,至少不是正式的。

但是我编写了一个包装器脚本,它在jekyll启动之前读取环境变量并将其附加到_config.yml文件并删除变量post build。

  echo "secret-variable: $PASSWORD" >> _config.yml
  bundle exec jekyll build -d target
  sed '$d' _config.yml                        //this is to delete the last line

现在我可以在液体标签的任何地方使用site.secret-variable

我知道这不是正确的做法,但编写自定义ruby脚本也是如此。

答案 3 :(得分:0)

我个人认为使用ruby Jekyll插件更合适且可移植。有一个非常简单而有效的解决方案available here

主要思想是ruby可以访问ENV变量,因此您可以使用一个小的ruby插件将所需的来自环境的所有信息加载到site.config液体阵列中。您还可以定义默认值。

请注意,链接中给出的示例并不是最相关的,因为Jekyll本身已经在build command options中提供了产品/暂存环境。

答案 4 :(得分:0)

如果您的目标是将环境变量用作流动项目{{ site.something }},则可以Gemfile进行中:

gem 'jekyll-environment-variables', group: :jekyll_plugins

然后您将能够使用{{ site.env.HOME }}并期望它在输出HTML中被转换为类似/home/ubuntu的形式。

公开信息:我是the gem的所有者,很久以前就一直在个人使用它。

答案 5 :(得分:-3)

如果您的bash环境变量声明为

export ENV_ACCESS_TOKEN=xxxxx
export ENV_SPACE_ID=yyyyyy

你可以在config.yml

中得到这样的结果
space: ENV_SPACE_ID # Required
access_token: ENV_ACCESS_TOKEN # Required