如何使用sprockets将rails资产依赖项添加到环境变量?

时间:2016-03-04 10:34:55

标签: ruby-on-rails ruby-on-rails-4 assets sprockets rails-sprockets

我做了以下js.erb:

#= require cable

this.App = {};
App.cable = Cable.createConsumer('<%= Rails.application.config.web_socket_server_url %>');

我希望sprockets在web_socket_server_url更新时重新生成资产。

我尝试使用depend_on,但它仅适用于文件。我还尝试在初始化程序中添加一个配置块(我希望在更改时重新加载所有资产,而不仅仅是相关的资产):

Sprockets.register_dependency_resolver 'web-socket-server-url' do
  ::Rails.application.config.web_socket_server_url
end

config.assets.configure do |env|
  env.depend_on 'web-socket-server-url'
end

在看到sprocket-rails https://github.com/rails/sprockets-rails/commit/9a61447e1c34ed6d35c358935bcae4522b60b48d

的提交后,我明白了

但这并不像我预期的那样有效。

理想情况下,我希望能够在我的初始化程序中注册依赖项解析程序,然后在我的资产中添加//= depend_on 'web-socket-server-url',这样只会重新加载资产。

作为一种解决方法,我可能会在HTML标记中添加配置,并在不使用ERB的情况下进入javascript,但感觉不太好。

如何使用链轮进行此操作?

1 个答案:

答案 0 :(得分:1)

当前的API就是您已使用的API。

Sprockets.register_dependency_resolver 'web-socket-server-url' do
  ::Rails.application.config.web_socket_server_url.to_s
end

config.assets.configure do |env|
  env.depend_on 'web-socket-server-url'
end

当配置被更改时,这将使所有缓存无效,而不是指向该文件的缓存。