0

ユーザーがデータベースに保存されているロゴをアップロードできるように、ペーパークリップを使用しています

company_setting.rb モデル:

has_attached_file :logo_image,
      :storage => :database,
      :styles => {:original => "160x80>",
                  :small  => {:geometry =>"100x50>" , :column =>'logo_image_small_file'}},
      :url => '/settings/:id/logo_images?id=:id&style=:style'

html.erbビューで次のように、この画像をhtmlにレンダリングしても問題ありません

<%=  image_tag current_user.company.company_setting.logo_image.url + "&id=#{current_user.company.company_setting.id}" %>

ただし、同じ画像を pdf.erb ファイルでレンダリングすることはできません。以前に pdfkit とアセット パイプラインで問題が発生しました。私はpdfkitが画像を見つけるために完全なURLを必要とすると思うので、次のような多くの方法を試しました:

<%=  image_tag "#{Rails.root}" + current_user.company.company_setting.logo_image.url + "&id=#{current_user.company.company_setting.id}" %>

まだレンダリングされていません。誰でもアイデアはありますか?

4

1 に答える 1

0

したがって、私がここでやろうとしていることには2つの問題があったことがわかります。

まず、私が作成した完全なURLが間違っていました。画像タグのURLの構成を次のように変更しました。

<%=  image_tag URI.join(root_url(:subdomain => current_user.company.subdomain),(company_setting.logo_image.url + "&id=#{company_setting.id}"))).to_s%>

これにより、開発中か本番環境かに関係なく、ベースURLの前にサブドメインを追加できます。(ここでRailscast

2番目の問題は、pdfが要求されると、デッドロックが発生することです。つまり、ロゴ画像とpdfのサーバーへの呼び出しがあり、どちらももう一方が終了するまで完了できません。私はこれに対する解決策を思い付いていませんが、私は満足しています。config.threadsafeを設定することで解決します!product.rbファイルとdevelopment.rbファイルで、サーバー要求を実行する前にすべてのリソースとコードを効果的にロードします。これは本番環境では問題ありませんが、development.rbでこれを設定すると、F5駆動の開発を実行できなくなります。ブラウザに変更が表示されるたびに、サーバーを再起動する必要があります。画像をキャッシュしてローカルに提供するか、スレッド化されたリクエストをローカルで把握することを検討しています(WeBrickサーバーを使用)

それまでの間、PDFを設定していて、実際に編集する必要はないので(まだ!)、イメージを条件として、開発ではなく本番環境でスレッドセーフを設定しました。

<% if !Rails.env.development? %>
    <%=  image_tag URI.join(root_url(:subdomain......%>
<% end %> 

理想的ではありませんが、今のところはうまくいくでしょう。

于 2012-09-25T10:10:13.460 に答える