Usando WordPress com plugin json_api como um CMS para um aplicativo Rails

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 @contentvariá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 301redirecionamento para o conteúdo. Eu tive que ter certeza de que faraday.use FaradayMiddleware :: FollowRedirects foi adicionado ao meu bloco de inicialização.