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

所以事实证明,我在这里尝试做的事情有两个问题。

首先,我创建的完整网址是错误的。我将图像标签的 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

第二个问题是,当请求 pdf 时,会发生死锁,即为徽标图像和 pdf 调用服务器,但在另一个完成之前,两者都无法完成。我还没有想出一个令我满意的解决方案。通过设置 config.threadsafe 来解决!在 production.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 回答