我試圖訪問我的引擎中的url助手來設置rack-cors。現在,我對機架中間件配置中的其中一個URL進行了硬編碼。我已閱讀the order in which Rails initializers are run,並且在加載順序的這一點上,我應該有可用的引擎路線。我想我會在活動add_routing_paths
上提供它們,但是在使用pry進行挖掘後,我找不到路線。另一個讓我認爲自己做錯了的陳述是文檔說:「應用程序的某些部分,特別是路由,尚未設置在調用after_initialize塊的位置。」據this list:在初始化程序中訪問Rails引擎的URL助手
- 需要 「配置/的boot.rb」 設置負載路徑
- 需要railties和發動機
- 定義Rails.application爲 「類MyApp的::應用<的Rails ::應用」
- 運行config.before_configuration回調
- 負載配置/環境/ ENV.rb
- 運行config.before_initialize回調
- 運行由Railties,引擎和應用程序定義的Railtie#初始化程序。 一個接一個,每個引擎設置它的加載路徑,路由並運行它的config/initializers/*文件。
- 通過railties,引擎和應用程序添加自定義Railtie#初始化執行
- 構建中間件棧和運行to_prepare回調
- 運行config.before_eager_load和eager_load!如果eager_load是真的
- 運行config.after_initialize回調
我試圖鉤到(7),但也許路由不可直到(11)?
module Zillow
class Engine < ::Rails::Engine
isolate_namespace Zillow
# Rails.application.routes.url_helpers
initializer "zillow.cors", after: :set_routes_reloader do |app|
require 'pry'; binding.pry
app.config.app_middleware.insert_before 0, Rack::Cors do
allow do
origins 'localhost:3000'
resource '/zillow/search_results', methods: :get
end
end
end
end
end
這裏是我的路線
zillow /zillow Zillow::Engine
Routes for Zillow::Engine:
api_deep_comps GET /api/deep_comps(.:format) zillow/api#deep_comps
api_zestimate GET /api/zestimate(.:format) zillow/api#zestimate
api_search_results GET /api/search_results(.:format) zillow/api#search_results
api_updated_property_details GET /api/updated_property_details(.:format) zillow/api#updated_property_details
感謝您的答覆!我注意到你的鏈接指向Rails最新版本的Rails指南,第5版。我提交的原始問題和後續響應在Rails 3中尋求解決方案。 –
啊,真的。我已經檢查過,沒有類似的Rails 3指南。但看起來,這個API已經在Rails 3中可用了:http://api.rubyonrails.org/v3.2/classes/ActiveSupport/Notifications.html 。所以解決方案也可能適用於Rails 3。 如果沒有,那麼也許可以通過在初始化程序中使用方法創建一個類來手動編寫替代方法,然後在加載路由後調用此方法。 –