【问题标题】:how to get environment in javascript file in rails app如何在rails应用程序的javascript文件中获取环境
【发布时间】:2012-05-13 12:39:18
【问题描述】:

你好,我一直试图在 Rails 中获取当前环境,但我认为我的 javascript 做错了,但我似乎不知道是什么。在我的 application.js 我有...

var rails_env = '<%= Rails.env -%>';
alert(rails_env);
alert(rails_env.value);
if(rails_env == 'development'){
    alert('inside if')
    var indexName = "idx";
}
else{
    alert('inside else')
     var indexName = "idx_production";
}

即使我处于开发模式,它也总是进入我的 else 语句。我究竟做错了什么?谢谢

如何在 Rails 应用程序的 javascript 文件中获取环境

【问题讨论】:

  • 您能确认Rails.env 变量正在脚本中输出吗?您可能需要将扩展​​名更改为 application.js.erb 以确保它被解析
  • 嗯,在我的第一个警报中,它会说 。然后在我的第二次未定义。将其更改为 application.js.erb 会搞砸什么吗?喜欢我的管道吗?
  • 你打赌!我把它绑在了 google-security 的答案中。

标签: javascript ruby-on-rails environment-variables


【解决方案1】:

Rails 的资产管道只会预处理您标记为解析的资产。无论这些资产最终是 CSS、JS 还是其他任何东西,您都可以通过调整文件扩展名来标记要解析的文件。

在这种情况下,您要尝试输出 ERB 变量,您需要将文件的扩展名更改为 application.js.erb

对预处理器 here 进行了扩展讨论。

【讨论】:

    【解决方案2】:

    您不需要将它直接传递到您的 javascript 文件中。您可以在 erb 视图文件中执行此操作,例如:

    <script>
      window._rails_env = "<%= Rails.env %>"
    </script>
    

    或者更好:

    <%= javascript_tag do %>
      window._rails_env = "<%= Rails.env %>"
    <% end %>
    

    或者最好的(恕我直言)这个:

    <body data-env="<%= Rails.env %>">
      ...
    

    然后:

    var railsEnv = $('body').data('env')
    

    警告:

    像这样将整个 Rails 环境转储到脚本中几乎肯定会危及 Web 应用程序的安全性!正如 Michał Zalewski 在下面的评论中提到的,您的 Rails 应用程序在其环境中包含敏感信息,例如数据库凭据、API 密钥、用于签名和加密 cookie 的应用程序机密等。

    【讨论】:

    • Rails.env 有时可能包含可靠的信息,例如数据库凭据。
    【解决方案3】:

    对我来说,environment.js 位于/config/webpack/environment.js

    【讨论】:

    • 如何创建和使用它们?一个例子会很有帮助
    • @Prime 我不是 webpack 方面的专家,但我只是尝试了rails new newapp,它带有/config/webpack/environment.js 文件。 (ralis 版本Rails 6.0.3.4)
    猜你喜欢
    • 2019-04-04
    • 2012-05-30
    • 1970-01-01
    • 2012-03-24
    • 2016-01-27
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多