我可以在Jekyll的$FOO
文件中使用一个我的bash环境变量(比如_config.yml
)吗?
我尝试过使用:
foo = <%= ENV['FOO'] %>
但它没有工作,因为Ruby代码没有被解释。
使用的版本:
答案 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