0

我用回形針允許用戶上傳一個標誌,這是存儲在數據庫中獲取回形針數據庫圖像在生成的PDF顯示使用pdfkit

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作爲在html.erb觀點如下

<%= 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}" %> 

還沒渲染。任何人有任何想法?

回答

0

所以事實證明,我在這裏要做的事情有兩個問題。

首先,我創建的完整url是錯誤的。我改變了URL的建設,爲圖片標籤:

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

這允許在基本網址前面加上子域,無論是在開發或生產。 (Railscast here

第二個問題是,當請求pdf時,會發生死鎖,即存在一個針對徽標圖像和pdf的服務器調用,直到另一個完成才能完成。我還沒有想出一個我滿意的解決方案。它通過設置config.threadsafe解決!在執行任何服務器請求之前有效地加載所有資源和代碼的production.rb和development.rb文件中。這在生產中很好,但是在development.rb中設置這意味着我無法執行F5 driven development ....服務器需要重新啓動,以便在瀏覽器中看到每個更改。我正在考慮緩存映像並在本地提供服務,或者在本地找出線程請求(使用WeBrick服務器)

與此同時,由於我已經設置了PDF,因此我不需要編輯它( !還)我已經建立了線程安全的生產,而不是在開發與圖像上的條件:

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

不理想,但它現在做....