【问题标题】:Ruby how to change option on extension that was already activatedRuby如何更改已激活的扩展选项
【发布时间】:2018-09-27 15:23:42
【问题描述】:

是否可以在激活后更改扩展选项?基本上,我们有这个:

activate :dato,
  token: ENV.fetch("DATO_API_TOKEN"), live_reload: true, preview: true

configure :development do
  activate :livereload
end

但这会为所有环境设置preview: true 选项。我想做的是将preview: true 设置移动到configure :development 块内。

【问题讨论】:

  • 您可以对每个环境有不同的activate 调用,例如activate :dato, ..., preview: true 在您的 development 环境中和 activate :dato, ..., preview: false 在您的 build 环境中。
  • 顺便说一句,我认为这是“扩展”而不是中间人术语中的“宝石”。
  • 感谢@Stefan,自从我发布问题以来,我就找到了这个解决方案。问题是,我有一个dato.tap do |dato| 块在两个configure 块之外,它会抛出一个错误,因为dato 尚未定义。我想我可以将该块移动到 configure 块内,但它会是重复的代码,而且它是一个 块,可能会增加错误的可能性。
  • 它仍然是 Ruby。您可以将tap 代码包装在方法或过程中,然后从configure 中调用它。 Adding Methods to config.rb 似乎是在 Middleman 中做到这一点的正确方法。要获得更具体的答案,您必须显示整个代码(即包括 tap 部分)
  • 太棒了,谢谢。让我看看如何做到这一点。抱歉,我是个菜鸟,通常不负责应用程序的 Ruby 部分。

标签: ruby middleman


【解决方案1】:

我最终得到了这个解决方案。不确定这是否是最好的解决方案,但它有效。注意:“ENVIRONMENT”变量仅为生产设置,因此“开发”定义为缺少值为“生产”的键。

activate :dato,
  token: ENV.fetch("DATO_API_TOKEN"), live_reload: true, preview: !(ENV.key?("ENVIRONMENT") && ENV["ENVIRONMENT"] == "production")

【讨论】:

  • ENV.key?("ENVIRONMENT") 甚至不需要。如果密钥不存在,ENV["ENVIRONMENT"] 只返回 nil,它也不等于 "production"
  • 好吧,我稍后再试试,如果代码更易读会更好。但是,我相信我记得它没有返回 nil 而是抛出了一个错误。谢谢。
  • ENV.fetch 确实如此(它会引发 KeyError),而 ENV.[] 仅返回 nil
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多