我正在使用 rake-pipeline 为 Ember.js 应用程序设置我的开发环境,如此处所述。
在开发过程中,我的 html 和 javascript 由 webrick(我不太了解的 rake-filter 魔术)提供服务,http://0.0.0.0:9292
并且我有一个由 Apache 提供的用 php 开发的 REST 服务http://somename.local
由于浏览器的反跨域 ajax 功能,我来自客户端应用程序的 ajax 调用丢失了。我该如何解决这个问题?
我正在使用 rake-pipeline 为 Ember.js 应用程序设置我的开发环境,如此处所述。
在开发过程中,我的 html 和 javascript 由 webrick(我不太了解的 rake-filter 魔术)提供服务,http://0.0.0.0:9292
并且我有一个由 Apache 提供的用 php 开发的 REST 服务http://somename.local
由于浏览器的反跨域 ajax 功能,我来自客户端应用程序的 ajax 调用丢失了。我该如何解决这个问题?
您不能直接在 Assetfile 中配置代理。您必须创建一个config.ru
文件并使用该rackup
命令启动服务器。
这是一个示例资产文件:
input "app"
output "public"
和 config.ru:
require 'rake-pipeline'
require 'rake-pipeline/middleware'
require "rack/streaming_proxy" # Don't forget to install the rack-streaming-proxy gem.
use Rack::StreamingProxy do |request|
# Insert your own logic here
if request.path.start_with?("/api")
"http://localhost#{request.path.sub("/api", "")}"
end
end
use Rake::Pipeline::Middleware, 'Assetfile' # This is the path to your Assetfile
run Rack::Directory.new('public') # This should match whatever your Assetfile's output directory is
您必须安装 rack 和 rack-streaming-proxy gem。
您可以使用Rack::Proxy然后将所需的请求发送到代理。
if request.path.start_with?("/api")
URI.parse("http://localhost:80#{request.path}")
end