Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 访问coffeescript文件中的heroku环境变量_Ruby On Rails_Heroku_Coffeescript - Fatal编程技术网

Ruby on rails 访问coffeescript文件中的heroku环境变量

Ruby on rails 访问coffeescript文件中的heroku环境变量,ruby-on-rails,heroku,coffeescript,Ruby On Rails,Heroku,Coffeescript,我有一个场景,我想让我的CoffeeScript文件访问一个环境变量,比如API键值。这在本地运行得很好,但当我把它推到heroku时,它就不起作用了 该文件的名称类似于myfile.js.coffee.erb 我是这样设置值的 api_key = '<%= ENV['SERVICE_API_KEY'] %>' var api_key; api_key = ""; 在预编译我的资产时,我是否需要做一些事情,让它访问环境变量?我承认我不熟悉CoffeeScript和Rails资产管

我有一个场景,我想让我的CoffeeScript文件访问一个环境变量,比如API键值。这在本地运行得很好,但当我把它推到heroku时,它就不起作用了

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

我是这样设置值的

api_key = '<%= ENV['SERVICE_API_KEY'] %>'
var api_key;
api_key = "";

在预编译我的资产时,我是否需要做一些事情,让它访问环境变量?我承认我不熟悉CoffeeScript和Rails资产管道。有没有其他更被接受的方法?由于明显的原因,我不想将其嵌入到文件中。

因此,由于API密钥将对感兴趣的人可见,无论是在javascript文件还是html文件中,而且您确实不想在每个请求中生成新的.js文件,对于同样的问题,我找到的最简单的解决方案是将密钥放入
layout.html.erb
文件中

您可以将它放在脚本标记中,使用数据属性,任何可以使您的船漂浮的东西,但是它可以工作,并且您可以获得动态变量的好处,并且必须渲染一个更少的文件


您仍然可以使用
。您必须在js(或coffee)中获取变量,但这非常简单。

因此,由于API密钥对于感兴趣的人来说是可见的,无论是在javascript文件还是html文件中,而且您确实不想在每个请求中生成新的.js文件,对于同样的问题,我找到的最简单的解决方案是将密钥放入
layout.html.erb
文件中

您可以将它放在脚本标记中,使用数据属性,任何可以使您的船漂浮的东西,但是它可以工作,并且您可以获得动态变量的好处,并且必须渲染一个更少的文件

您仍然可以使用
。您必须在js(或coffee)中获取变量,但这非常简单。

试试这个

heroku labs:enable user_env_compile -a myapp
然后再次部署

为我们工作

这家伙的所有功劳: 试试这个

heroku labs:enable user_env_compile -a myapp
然后再次部署

为我们工作

这家伙的所有功劳:

为什么不想将其嵌入文件中?我正在使项目开源,所以我不想在源代码中使用api密钥。啊,明白了;我误解了你在文件中嵌入它的意思。另外,在本地我想使用不同的api键,因此通过使用ENV vars,我不必手动更改每个环境的文件。是的,我绝对同意不硬编码它们;我很快就读到了,还以为你担心其他人看到密钥。你为什么不想将其嵌入文件中?我正在使项目开源,所以我不想在源代码中使用api密钥。啊,明白了;我误解了你在文件中嵌入它的意思。另外,在本地我想使用不同的api键,因此通过使用ENV vars,我不必手动更改每个环境的文件。是的,我绝对同意不硬编码它们;我只是很快读到了这篇文章,还以为你担心其他人会看到这个键。是的,我考虑过,比如在布局中设置window.API_键,或者设置一个body数据属性并以这种方式访问它,如果需要的话,最终可能会走这条路。我只是觉得应该有办法在Heroku上实现这一点,因为我可以在本地完成,但可能不行。您可以尝试在Heroku上编译资产(
Heroku run bundle exec rake assets:precompile
)-我没有尝试过,但我也遇到了同样的问题,我通过利用视图中的数据属性解决了这个问题。我已经尝试过了,但没有成功。我可能会选择data attr路线,但我仍然对heroku上是否有解决此问题的方法感兴趣。是的,我考虑过在布局中设置window.API_键,或者设置body数据属性并以这种方式访问它,如果需要的话,最终可能会选择该路线。我只是觉得应该有办法在Heroku上实现这一点,因为我可以在本地完成,但可能不行。您可以尝试在Heroku上编译资产(
Heroku run bundle exec rake assets:precompile
)-我没有尝试过,但我也遇到了同样的问题,我通过利用视图中的数据属性解决了这个问题。我已经尝试过了,但没有成功。我可能会选择data attr路线,但我仍然对heroku上是否有解决此问题的方法感兴趣。