从Environment Variable设置JS变量

时间:2013-10-11 05:20:07

标签: ruby-on-rails ember.js ruby-on-rails-4 ember-data

我有一个使用Rails作为服务器的EmberJS应用程序。在我的Javascript代码中,我有一些变量会根据应用程序所处的环境而变化。例如,如果应用程序位于开发环境中,我希望JS代码将POST请求发送到localhost:3000,如果是在暂存中,我希望它转到staging.domain.com,如果它正在生产中,它应该转到domain.com。在更改环境之前,不是手动更改所有常量变量,而是根据环境设置JS文件常量的最佳方法是什么?我需要这个的原因是因为ember应用程序正在与外部服务器进行通信以获取其POST请求。

1 个答案:

答案 0 :(得分:1)

由于我猜你使用rails提供文件(包括你的ember app js文件),你可以通过将一个rails env变量注入这些文件来实现这一点,例如在索引中执行类似的操作html的:

index.html.erb

...
<%= javascript_tag do %>
  window._current_host = "<%= Rails.env['SERVER_NAME'] %>"
<% end %>
...

完成此操作后,您可以在javascript代码中使用该全局变量window._current_host,以满足您的需求:

app.js

...
App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    var url = window._current_host + '/somepath/...';
    return Ember.$.getJSON(url, function(data) {
      return data;
    });
  }
});
...

甚至:

DS.RESTAdapter.reopen({
  host: window._current_host
});

以上只是伪代码,肯定有更多方法可以做同样的事情,但我想你会得到这个想法。

希望它有所帮助。