You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby脚本中引入ENV[api_key]替代硬编码的appid?

如何在Ruby脚本中用环境变量替代硬编码的OpenWeatherMap appid?

首先,先确认你的Ruby环境已经能读取到application.yml里的api_key值。如果你用的是Rails,通常会用Figaro或者dotenv这类gem来加载YAML里的配置到环境变量中——先在控制台运行puts ENV['api_key'],确保能输出1234567890,这是后续操作的基础。

接下来分两种常见场景处理:

场景1:在ERB模板中生成脚本(比如Rails视图)

如果这段JS是在ERB模板里渲染的,直接用ERB的插值语法把环境变量插进去就行,代码示例如下:

<script>
  window.myWidgetParam ? window.myWidgetParam : window.myWidgetParam = [];
  window.myWidgetParam.push({
    id: 15,
    cityid: '2643743',
    appid: '<%= ENV['api_key'] %>',
    units: 'metric',
    containerid: 'openweathermap-widget-15',
  });
  (function() {
    var script = document.createElement('script');
    script.async = true;
    script.charset = "utf-8";
    script.src = "//openweathermap...";
  })()
</script>

ERB会在渲染页面时自动把<%= ENV['api_key'] %>替换成实际的API密钥。

场景2:纯Ruby脚本中生成这段JS代码

如果是在纯Ruby脚本里构建这段JS字符串,用Ruby的字符串插值即可:

# 先确保环境变量已加载,没加载到就抛出提示
api_key = ENV['api_key'] || raise("API key not found in environment variables")

script_content = <<~JAVASCRIPT
  window.myWidgetParam ? window.myWidgetParam : window.myWidgetParam = [];
  window.myWidgetParam.push({
    id: 15,
    cityid: '2643743',
    appid: '#{api_key}',
    units: 'metric',
    containerid: 'openweathermap-widget-15',
  });
  (function() {
    var script = document.createElement('script');
    script.async = true;
    script.charset = "utf-8";
    script.src = "//openweathermap...";
  })()
JAVASCRIPT

# 之后可将script_content输出到HTML文件或传递给渲染逻辑

关键注意事项

  • 验证环境变量:运行脚本前务必确认ENV['api_key']能正确取值,避免空值导致天气组件加载失败。
  • 部署环境配置:如果部署到服务器,要确保服务器环境已设置该变量(比如通过dotenv的.env文件,或服务器的环境变量配置面板)。
  • 特殊字符处理:虽然OpenWeatherMap的密钥一般是字母数字组合,但如果密钥含单引号等特殊字符,可通过api_key.gsub("'", "\\'")进行转义,避免JS语法错误。

内容的提问来源于stack exchange,提问作者Johan Faerch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:20:30