1

私はRuby、Rails、Herokuでの作業に慣れておらず、RMagickにも慣れていません。スタックオーバーフローで見つかったHerokuでRMagickを使用するためのいくつかの解決策を試しましたが、結果はありませんでした。これが私が遭遇した興味深い障害物です。

テキストが指定された長さを超えた場合にのみ変更する適切なフォントサイズを決定するための機能関数を作成しました。すべてが私のローカルマシンで美しく機能します。ただし、herokuで試行すると、RMagickがインストールされていないか、認識されていないように見えます。herokuコンソールがruby1.9.1を参照しているように見えますが、これはそれと関係がありますか?私はこの問題の調査を続けていますが、誰かがこの問題について何か考えを持っているなら興味があります。

どうもありがとう

*ローカルマシンルビー1.8.7レールコンソール***

1.8.7 :001 > def find_width(string, typeface, font_size)
1.8.7 :002?>   max_width = 1087
1.8.7 :003?>   type_size = font_size.to_i
1.8.7 :004?>   label = Magick::Draw.new
1.8.7 :005?>   label.font = typeface
1.8.7 :006?>   label.pointsize = type_size
1.8.7 :007?>   label.text_antialias(true)
1.8.7 :008?>   label.text(0,0,string)
1.8.7 :009?>   metrics = label.get_type_metrics(string)
1.8.7 :010?>   width = metrics.width
1.8.7 :011?>   if width > max_width
1.8.7 :012?>     adjusted_size = type_size * max_width / width
1.8.7 :013?>     return adjusted_size.to_i
1.8.7 :014?>     else
1.8.7 :015 >       return font_size
1.8.7 :016?>     end
1.8.7 :017?>   end
=> nil 
1.8.7 :018 > find_width("HI", "blackjar-webfont", "263pt")
=> "263pt" 
1.8.7 :019 > find_width("This is a test!", "blackjar-webfont", "263pt")
=> 185 
1.8.7 :020 > 

*ローカルマシンルビー1.9.2レールコンソール***

Loading development environment (Rails 3.0.7)
1.9.2p290 :001 > def find_width(string, typeface, font_size)
1.9.2p290 :002?>   max_width = 1087
1.9.2p290 :003?>   type_size = font_size.to_i
1.9.2p290 :004?>   label = Magick::Draw.new
1.9.2p290 :005?>   label.font = typeface
1.9.2p290 :006?>   label.pointsize = type_size
1.9.2p290 :007?>   label.text_antialias(true)
1.9.2p290 :008?>   label.text(0,0,string)
1.9.2p290 :009?>   metrics = label.get_type_metrics(string)
1.9.2p290 :010?>   width = metrics.width
1.9.2p290 :011?>   if width > max_width
1.9.2p290 :012?>     adjusted_size = type_size * max_width / width
1.9.2p290 :013?>     return adjusted_size.to_i
1.9.2p290 :014?>     else
1.9.2p290 :015 >       return font_size
1.9.2p290 :016?>     end
1.9.2p290 :017?>   end
=> nil 
1.9.2p290 :018 > find_width("HI", "blackjar-webfont", "263pt")
=> "263pt" 
1.9.2p290 :019 > find_width("This is a test!", "blackjar-webfont", "263pt")
=> 185 
1.9.2p290 :020 > 

** * ** * ** * HEROKU CONSOLE * ** * ** * ****

Loading production environment (Rails 3.0.7)
irb(main):001:0> def find_width(string, typeface, font_size)
irb(main):002:1> max_width = 1087
irb(main):003:1> type_size = font_size.to_i
irb(main):004:1> label = Magick::Draw.new
irb(main):005:1> label.font = typeface
irb(main):006:1> label.pointsize = type_size
irb(main):007:1> label.text_antialias(true)
irb(main):008:1> label.text(0,0,string)
irb(main):009:1> metrics = label.get_type_metrics(string)
irb(main):010:1> width = metrics.width
irb(main):011:1> if width > max_width
irb(main):012:2> adjusted_size = type_size * max_width / width
irb(main):013:2> return adjusted_size.to_i
irb(main):014:2> else
irb(main):015:2* return font_size
irb(main):016:2> end
irb(main):017:1> end
=> nil
irb(main):018:0> find_width("HI", "blackjar-webfont", "263pt")
NameError: uninitialized constant Magick from /app/vendor/bundle/ruby/1.9.1/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing_from_s3_library'
from (irb):4:in `find_width'
from (irb):18
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'from script/rails:6:in `require'from script/rails:6:in `<main>'
irb(main):019:0> 

機能コード

def find_width(string, typeface, font_size)
    max_width = 1087
    type_size = font_size.to_i
    label = Magick::Draw.new
    label.font = typeface
    label.pointsize = type_size
    label.text_antialias(true)
    label.text(0,0,string)
    metrics = label.get_type_metrics(string)
    width = metrics.width
    if width > max_width
        adjusted_size = type_size * max_width / width
        return adjusted_size.to_i
    else
        return font_size
    end
end
4

0 に答える 0