Rails 7에서 Dev.to(무료)와 같은 OG 링크 미리보기를 생성하는 방법
Dev.to와 마찬가지로 뷰티 링크 미리보기를 갖는 방법에 대한 빠른 기사
다음과 같은 결과를 얻게 됩니다.
예, "dev.to와 같은"😛로 말 그대로였습니다.
새 프로젝트workby.io와 비슷한 것을 빌드했습니다. 빌드 방법은 다음과 같습니다.
내가 찾은 거의 모든 가이드는 htmlcsstoimage.com을 사용하고 있었고 실제로 dev.to는 그것을 사용합니다. 꽤 유명하고 효율적이지만 1k 이미지당 $14 달러를 지불하고 싶지는 않습니다 😂🐁
그래서 저는 Grover을 사용할 것입니다. Google Puppeteer 및 Chromium을 사용하여 HTML을 PDF, PNG 또는 JPEG로 변환하는 Ruby gem입니다.
예를 들어 Node.js로 빌드하고 싶다면 저를 팔로우할 수도 있습니다. Puppeteer는 대중적이고 사용하기 쉽습니다.
간단히 말해 HTML 보기를 만들고 스크린샷을 찍을 것입니다.
빈 Rails 프로젝트를 만들거나 현재 앱에 추가 기능을 추가할 수 있습니다.
설정
다음을 사용하여 Grover gem 설치
bundle add grover
그리고 Puppeteer인 Grover의 종속성은 다음과 같습니다.
yarn add puppeteer
그런 다음 다른 링크 미리 보기 템플릿으로 응답할 수 있는 빈 컨트롤러를 만듭니다.
rails g controller og-imager dev_to
dev_to
작업에서 Grover를 호출하여 마법을 수행하도록 합시다.app/controllers/og_imager_controller.rb
class OgImagerController < ApplicationController
# GET /og_imager/dev_to
# @param {string} title
# @param {string} avatar
# @param {string} username
# @param {string} timestamp
# @param {array} logos
# @returns image/png
def dev_to
# Get params and set to variable
# TODO: Retrieve your object instead :p
@title = params[:title]
@avatar = params[:avatar]
@username = params[:username]
@timestamp = params[:timestamp]
@logos = params[:logos]
# Grover.new accepts a URL or inline HTML and optional parameters for Puppeteer
grover = Grover.new(
render_to_string
)
# Get a screenshot
png = grover.to_png
# Render image
send_data(png, type: 'image/png', disposition: 'inline')
end
end
다음은 간단한 HTML/CSS 보기입니다.
app/views/og_imager/dev_to.html.erb
<div class="container">
<div class="card">
<h1 class="title">
<%= @title %>
</h1>
<div class="details">
<div class="user">
<img src="<%= @avatar %>" class="avatar">
<p class="username">
<%= @username %> - <%= @timestamp %>
</p>
</div>
<div class="logos">
<% @logos.each do |logo| %>
<img src="<%= logo %>" class="logo">
<% end %>
</div>
</div>
</div>
</div>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&display=swap');
*{
font-family: 'Roboto', sans-serif;
color: #cd685f;
}
.container{
width: 1128px;
height: 600px;
display: flex;
}
.card{
display: flex;
justify-content: space-between;
flex-direction: column;
margin: 2.8rem 4rem 4rem 2.8rem;
border: 3px solid #c56b61;
border-radius: 25px 25px 0px 0px;
box-shadow: 7px 10px 0px 1px #c56b61;
padding: 3.8rem 1.8rem 1.8rem 1.8rem;
}
.title{
margin: 0px;
font-weight: 500;
font-size: 5rem;
line-height: 80px;
}
.details{
display: flex;
justify-content: space-between;
}
.user{
display: flex;
align-items: center;
}
.avatar{
border: 3px solid #c56b61;
width: 50px;
height: 50px;
border-radius: 50%;
margin-right: 10px;
}
.username{
margin: 0;
font-size: 2.5rem;
}
.logos{
display: flex;
justify-content: space-between;
}
.logo{
width: 60px;
height: 60px;
margin-left: 20px;
transform: rotate(5deg);
}
</style>
마지막으로 브라우저 뷰포트(최종 이미지 크기)를 설정하는 초기화 프로그램을 만듭니다.
initializers/grover.rb
Grover.configure do |config|
config.options = {
viewport: {
width: 1128,
height: 600
},
}
end
빈 프로젝트를 생성했고 이를 마이크로 서비스로 사용하려는 경우 이 프로젝트를 Heroku에 배포하는 방법에 대한 가이드가 있습니다.
heroku create your_app_name
heroku buildpacks:add heroku/nodejs --index=1
heroku buildpacks:add jontewks/puppeteer --index=2
heroku config:set GROVER_NO_SANDBOX=true
링크 미리보기에서 이 이미지를 사용하려면 The Open Graph protocol 이 필요합니다. 브라우저가 찾는 단순한 메타 태그입니다.
메타 태그는 항상 켜져 있으므로
app/views/layouts/application.html.erb
<%= yield(:head) %>
그런 다음 ERB에 이전 블록을 다음으로 채우도록 요청합니다.
<%= content_for :head do %>
<meta property="og:title" content="<%= @article.title %>">
<meta property="og:image" content="<%= article_link_preview(@article) %>">
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1128">
<meta property="og:image:height" content="600">
<meta name="twitter:card" content="summary_large_image" />
<% end %>
세부정보 보기에서 좋아요:
/articles/:id
twitter:card
링크 미리보기에서 더 화려하기 때문에 더 자세한 내용을 읽을 수 있습니다.이전
article_link_preview
메서드는 찾고 있는 URL을 생성하는 간단한 도우미입니다.app/helpers/articles_helper.rb
def article_link_preview article
uri = URI.parse('https://your_app_name.herokuapp.com/ogimage')
uri.query = URI.encode_www_form(
title: article.title,
'images[]': article.tags.collect(&:image),
timestamp: article.created_at.to_formatted_s(:short),
...
)
uri.to_s
end
당신은 다음과 같은 것을 얻을 것입니다 :
https://your_app_name.herokuapp.com/og_imager/dev_to?title=Real%20Time%20Notification%20System%20with%20Hotwire,%20in%20Rails%207&avatar=https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/369241/a0111bcb-a046-4398-98cd-f4cf0e2f8d0d.png&username=Matias%20Carpintini×tamp=13%20April&logos[]=https://img.icons8.com/office/80/000000/ruby-gemstone.png&logos[]=https://practicaldev-herokuapp-com.freetls.fastly.net/assets/devlogo-pwa-512.png
여기 전체의 repo이 있습니다.
Reference
이 문제에 관하여(Rails 7에서 Dev.to(무료)와 같은 OG 링크 미리보기를 생성하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/matiascarpintini/how-to-generate-og-links-preview-like-devto-for-free-with-rails-7-57b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)