我使用以下代码GET
所有机场数据(localhost:3000/api/v1/airports
),以便Typeahead.js可以自动填写机场信息。
$(document).on('ready page:load', function () {
var airports = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('search_string'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: window.location.origin + "/api/v1/airports"
}
});
// kicks off the loading/processing of `local` and `prefetch`
airports.initialize();
// passing in `null` for the `options` arguments will result in the default
// options being used
$('.typeahead').typeahead(null, {
name: 'airports',
displayKey: 'search_string',
// `ttAdapter` wraps the suggestion engine in an adapter that
// is compatible with the typeahead jQuery plugin
source: airports.ttAdapter()
});
});
当我将此部署到Heroku并访问表单页面时,Chrome中的控制台会返回以下内容:
GET http://localhost:3000/api/v1/airports.json net::ERR_EMPTY_RESPONSE application-b3c93a17005e4f5b078b985c7fa12088.js:3
它应该响应以下控制器:
module Api
module V1
class AirportsController < ApplicationController
skip_before_filter :verify_authenticity_token
respond_to :json
def index
respond_with(Airport.all)
end
def search
respond_with(Airport.pluck(:search_string))
end
def show
respond_with(Airport.find(params[:id]))
end
def create
@airport = Airport.new(airport.params)
if @airport.save
respond_to do |format|
format.json { render :json => @airport }
end
end
end
def update
@airport = Airport.find(params[:id])
if @airport.update(todo_params)
respond_to do |format|
format.json { render :json => @airport }
end
end
end
def destroy
respond_with Airport.destroy(params[:id])
end
end
end
end
这就是路线的样子:
namespace :api, defaults: {format: :json} do
namespace :v1 do
get 'airports/search', to: 'airports#search', as: 'search'
resources :airports, :airlines, :countries
end
end
它在我的开发环境中有效。有什么想法吗?
答案 0 :(得分:1)
您的资产,特别是您的javascript,包含了http://localhost:3000
的GET / json请求的硬编码链接,我猜您的javascript代码中的某些测试。
它被编译并保留在那里。
在生产环境中,您对资产所做的更改不适用于已编译的资产(它们已编译...)。
编译资产的唯一目的是加载更快....
因此,在每次更改后,您必须重新编译资产以使更改生效。这是一个繁琐的过程(我重复一遍,仅在标准的生产环境中),但是如果你在生产中运行一个仍在开发中的应用程序(它的发生频率超出你的想象),这是必要的。
这就是为什么重新编译资产并重新启动应用程序服务器将解决您的问题。