तो मैं एक रेल आवेदन पर काम कर रहा हूँ। यह उपयोगकर्ता इनपुट को टेक्स्ट करने के लिए तैयार की गई ओजी छवि उत्पन्न करता है। उदाहरण के लिए, आप "हैलो वर्ल्ड" इनपुट करते हैं, इसे सेव करते हैं, और फिर एक एप्लिकेशन "हैलो वर्ल्ड" के लिए लिखी गई एक ओजी इमेज जेनरेट करता है।

लेकिन यह इस त्रुटि के लिए होता है:

ऐप्स/कंट्रोलर/reviews_controller.rb

include SetupOgbImage

def create
  @review = current_user.active_reviews.create(create_params)
  @review.image = build(@review.content)
  if @review.save
    flash[:success] = "Successfully added a review!"
    redirect_to review_path(id: @review.id)
  else
    flash[:alert] = "Failed to add a review."
    redirect_to user_path(id: @review.reviewed_id)
  end
end

एप्लिकेशन/नियंत्रक/चिंताएं/setup_ogb_image.rb

module SetupOgbImage
    def build(text)
        text = prepare_text(text)
        img = MiniMagick::Image.open(Settings.ogb.base_image_path)
        img.combine_options do |config|
        config.font Settings.ogb.font_path
        config.fill Settings.ogb.color
        config.gravity Settings.ogb.gravity
        config.pointsize Settings.ogb.font_size
        config.draw "text #{Settings.ogb.text_position} #{text}"
        end
        img
    end

    def prepare_text(text)
        text.scan(/.{1,#{Settings.ogb.indention_count}}/)[0...Settings.ogb.row_limit].join("\n")
    end
end

सेटिंग्स.yml

ogb:
  base_image_path: ./app/assets/images/ogb_bg_image.png
  gravity: center
  text_position: "0,30"
  font_path: ./app/assets/fonts/Hind-Medium.ttf
  font_size: 24
  color: "#fff"
  indention_count: 60
  row_limit: 10
format:
  uuid: !ruby/regexp /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/
0
Shun Yamada 15 सितंबर 2019, 03:54

1 उत्तर

सबसे बढ़िया उत्तर

आपको टेक्स्ट को उद्धरणों में रखना चाहिए, अन्यथा, शेल, जो बदले में, कमांड को निष्पादित करता है, "हैलो" और "वर्ल्ड!" मानता है। mogrify को कॉल में दो अलग-अलग तर्कों के रूप में:

#                                               ⇓       ⇓
config.draw "text #{Settings.ogb.text_position} '#{text}'"
1
Aleksei Matiushkin 15 सितंबर 2019, 04:55