如何为 CORS Rails 应用程序公开 Javascript 资产?

Fer*_*ria 2 ruby-on-rails heroku cors asset-pipeline

我正在构建一个使用 CORS 并具有公共 API 的 Rails 应用程序。要使 API 正常工作,客户需要嵌入我在网站上托管的 Javascript 文件。因此,例如,他们需要将以下内容添加到他们的网站:

<script type="text/javascript" src="http://www.mywebsite.com/assets/events.js"></script>
<script type="text/javascript">
  //Call to public API method
  track();
</script>
Run Code Online (Sandbox Code Playgroud)

现在events.js文件位于/app/assets/javascripts/events.js我的应用程序中。当我编译并推送到 Heroku 时,所有这些都被一起缩小到/assets/application-320d973ae0689d7f.js文件中。

我的问题是,如何使events.js文件成为一个独立文件,可从我的应用程序使用直接 URL 路径访问外部网站?

Ric*_*eck 5

民众

我们之前通过将 javascript 放入public目录中来实现此功能:

#public/events.js
...
Run Code Online (Sandbox Code Playgroud)

这允许您向人们提供以下 URL:

<script src="http://domain.com/events.js"></script>
Run Code Online (Sandbox Code Playgroud)

尽管这不会绑定到您的资产管道中,但它会为您提供一个中央文件,您可以在需要时随时调用该文件。这非常重要,就像您有第三方引用文件一样,您至少需要他们有一个引用点。


CORS

提供单一参考对于应用程序的CORS 策略至关重要,因为您必须提供明确的“资源”。顺便说一下,我建议为此使用rack-cors gem

#config/application.rb
config.middleware.use Rack::Cors do
   allow do
     origins '*'
     resource '/events.js', :headers => :any, :methods => [:get]
   end
end
Run Code Online (Sandbox Code Playgroud)