我採取了不同的方法比Jimmy在這樣做同樣的事情。
我在Heroku上部署了兩個應用程序:一個Rails API和一個Create-React-App前端。沒有太具體,有幾個關鍵設置。首先,在你的Rails API,編輯cors.rb
文件,以便它允許跨域請求:
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'localhost:3000', 'https://myapp.herokuapp.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :delete],
end
end
由於此文件暗示,我的Rails應用程序不會對localhost:3000
本地運行,我改變了它在端口8000上運行而不是通過編輯puma.rb
:
port ENV.fetch("PORT") { 8000 }
創建反應的應用程式中localhost:3000
本地默認運行,所以你可以設置你的Rails API到你想要的任何端口上運行,只要它比你的前端不同。
然後我改變了我的創造反應的應用程序內的文件包含了API URL和常用的終點,我稱之爲AppConstants.js
:
// let APIRoot = "http://localhost:8000";
let APIRoot = "https://my-rails-api.herokuapp.com";
export default {
APIEndpoints: {
LOGIN: APIRoot + "https://stackoverflow.com/users/login",
SIGNUP: APIRoot + "https://stackoverflow.com/users/create",
TODOS: APIRoot + "/todos",
ITEMS: APIRoot + "/items",
},
};
現在您編輯獲取/ AJAX/XMLHttpRequest的調用,以便它使用的URL引用這些路由。例如使用取:
fetch(AppConstants.TODOS, {
method: 'POST',
body: JSON.stringify(values)
})
.then(response => response.text())
.then((body) => {
console.log(body);
});
此應用的常量文件可以很容易地在本地API根部和生產API根之間切換。
像往常一樣將您的rails api部署到heroku,會自動檢測到合適的構建包。對於您的反應應用程序,我建議使用this buildpack,因爲它將生成您的create-react-app的生成版本併爲您提供靜態資產。