34 lines
974 B
Ruby
34 lines
974 B
Ruby
|
class SitemapsController < ApplicationController
|
||
|
def show
|
||
|
path = params[:path]
|
||
|
bucket_name =
|
||
|
Rails.env.production? ?
|
||
|
ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)) :
|
||
|
ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket))
|
||
|
Rails.logger.info "Sitemap: #{path}"
|
||
|
|
||
|
begin
|
||
|
s3_client = Aws::S3::Client.new
|
||
|
response = s3_client.get_object(
|
||
|
bucket: bucket_name,
|
||
|
key: "sitemaps/#{path}"
|
||
|
)
|
||
|
|
||
|
expires_in 12.hours, public: true
|
||
|
content_type = response.content_type || "application/xml"
|
||
|
|
||
|
send_data(
|
||
|
response.body.read,
|
||
|
filename: path,
|
||
|
type: content_type,
|
||
|
disposition: "inline"
|
||
|
)
|
||
|
rescue Aws::S3::Errors::NoSuchKey
|
||
|
render status: :not_found
|
||
|
rescue Aws::S3::Errors::ServiceError => e
|
||
|
Rails.logger.error "S3 Error: #{e.message}"
|
||
|
render status: :internal_server_error
|
||
|
end
|
||
|
end
|
||
|
end
|