Eu sei que este post parece um pouco blasfemo, no entanto, queremos tornar o conteúdo fácil de adicionar para escritores de conteúdo e fácil de lidar em vários ambientes. Para facilitar, estamos usando uma instância do WordPress com o plugin json_api adicionado.
Essa técnica é especialmente útil com vários ambientes. No passado, tive problemas para manter todos os nossos ambientes em sincronia com o mesmo conteúdo.
Estou usando a gem Faraday para meu cliente HTTP e a lógica de configurações para todas as configurações do meu aplicativo.
routes.rb
get "/:space_type/:title", :to => "articles#show", :as => :space_type, :constraints => { :space_type => /get-advice/ }
articles_controller.rb
class ArticlesController < ApplicationController
def show
@content = Rails.cache.fetch("#{params['space_type']}-#{params['title']}") do
article = Article.new
article.get_post(params['title'])
end
render
end
end
A @content
variável de instância é um objeto json que você pode fazer o que quiser em sua visualização.
articles.rb
class Article
def initialize
@conn = Faraday.new(:url => "#{Settings.content.host}#{Settings.content.api_base}") do |faraday|
faraday.use FaradayMiddleware::FollowRedirects
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter :net_http
end
end
def get_post(title)
response = @conn.get "get_post?slug=#{title}"
response.body
end
end
Agora, as solicitações para myapp.com/get-advice/some-article-from-wordpress irão atingir nosso WordPress e armazenar em cache o conteúdo em nosso aplicativo. Isso libera os redatores de conteúdo para trabalhar em ferramentas que eles conhecem e adicionar conteúdo ao site de maneira adequada.
Uma das coisas que estava me confundindo originalmente era que o WordPress realmente faz um 301
redirecionamento para o conteúdo. Eu tive que ter certeza de que faraday.use FaradayMiddleware :: FollowRedirects foi adicionado ao meu bloco de inicialização.