1

我有一个在开发和我当前的生产服务器上运行良好的应用程序。

我想把它移到免费的heroku(基本配置:1 dyno,1 worker)。

不幸的是,pdf 生成(使用 PdfKit )没问题,但没有我的 CSS 中定义的图片。

我遵循了很多提示,包括:

想法?


找到了解决方法,但我仍然渴望知道更好的选择:

  • 我重复了我的观点:一个专用于 html,另一个专用于 pdf。

  • 我使用图片删除了所有 css 并将其放在一个单独的文件中,仅包含在专用于 html 的视图中

  • 最后,我在专用于 pdf的视图中插入了 css :

    .foo { background-image:url(<%= Rails.root %>/public/images/bar.png) }

非常丑陋但有效,所以请告诉我你是否更好

4

2 回答 2

0

这可能是css中指定url的方式的问题。我记得,它们应该是文件系统的绝对路径。你的css是什么样的?

于 2011-09-02T02:10:52.300 回答
0

以下是我如何回答我的需求:

  • 只有一个视图文件

  • 只有一个css文件

诀窍是将正确的 base_url动态传递给 css 文件,因为我需要一个 pdf 或 html。

我决定使用LESS。鉴于我在 DOM 中提供的 base-url,Style 以不同的方式编译 css。这个 base-url 是由一个助手生成的。


这是我的步骤:

  • 把我style.css改成style.less

  • 添加到我的观点:

<%= stylesheet_link_tag "style.less", :rel => "stylesheet/less" %>

<script id="base_url" type="text/javascript" data="<%= assets_path %>"></script>

<%= javascript_include_tag "less.min.js" %>
  • 在我的助手中:
  def assets_path
    if request.fullpath.include? ".pdf"
      "#{Rails.root.join('public',"images","pictos")}"
    else
      "#{request.protocol}#{request.host_with_port}/images/pictos"
    end
  end
  • 在我的style.less
@base_url: `document.getElementById('base_url').getAttribute('data')`;

.foo { background-image:~"url(@{base_url}/bar.png)" }
于 2011-09-02T23:18:42.860 回答