【问题标题】:Access heroku environment variable in coffeescript file在 coffeescript 文件中访问 heroku 环境变量
【发布时间】:2012-07-28 04:27:37
【问题描述】:

我有一个场景,我希望我的 CoffeeScript 文件访问一个环境变量,如 API 键值。这在本地可以正常工作,但是当我将其推送到 heroku 时它不起作用。

该文件的名称类似于 myfile.js.coffee.erb

我正在设置这样的值

api_key = '<%= ENV['SERVICE_API_KEY'] %>'

我知道这些值是在 heroku 中设置的,并且我已经三次检查了拼写等。我知道它正在被处理,因为生成的 JavaScript 文件看起来像这样

var api_key;
api_key = "";

在预编译我的资产时我需要做些什么来告诉它访问环境变量吗?我承认我是 CoffeeScript 和 Rails 资产管道的新手。还有另一种更被接受的方式吗?出于显而易见的原因,我不想将其嵌入文件中。

【问题讨论】:

  • 为什么不把它嵌入到文件中?
  • 我正在使项目开源,所以我不希望我的 api 密钥在源代码中。
  • 啊,明白了;我误解了您将其嵌入文件中的意思。
  • 另外,我想在本地使用不同的 api 密钥,因此通过使用 ENV vars,我不必手动更改每个环境的文件。
  • 是的,我绝对同意不对其进行硬编码;我很快就读到了,还以为你担心别人看到钥匙。

标签: ruby-on-rails heroku coffeescript


【解决方案1】:

因此,无论是在 javascript 文件还是 html 文件中,感兴趣的人都可以看到 API 密钥,而且您真的不想在每次请求时都生成一个新的 .js 文件,所以我最简单的解决方案是我发现同样的问题是将密钥放入您的layout.html.erb 文件中。

您可以将其放入脚本标签中,使用数据属性,无论您的船如何漂浮,但它可以工作,您可以获得动态变量的好处,并且不必渲染一个更少的文件。

您仍然可以使用&lt;%= ENV['api_key'] %&gt;。您必须在 js(或咖啡)中获取变量,但这很简单。

【讨论】:

  • 是的,我考虑过在布局中设置 window.API_KEY 或设置正文数据属性并以这种方式访问​​它,如果需要,可能最终会走这条路。我只是想应该有一种方法可以在 Heroku 上实现这一点,因为我可以在本地完成,但也许不行。
  • 您总是可以尝试在 heroku (heroku run bundle exec rake assets:precompile) 上编译资产 - 我没有尝试过,但我遇到了同样的问题,我通过利用数据属性解决了这个问题我的看法。
  • 已经试过了,但还是不行。我可能会选择 data-attr 路线,但如果有办法在 heroku 上解决这个问题,我仍然很感兴趣。
【解决方案2】:

试试这个

heroku labs:enable user_env_compile -a myapp

然后再次部署

为我们工作!

此人的所有功劳: Heroku always runs assets:precompile with the production environment for Rails 3.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 2012-09-14
    • 2020-01-24
    • 2018-12-05
    • 2019-04-07
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多