8

Tôi có thể tải tập tin pdf với:tạo pdf treo trên đường ray 4 sử dụng PDFkit đá quý

curl google.com | wkhtmltopdf - test.pdf 

nên nó có nghĩa là, lắp đặt wkhtmlpdf đã thành công.

Nhưng, khi tôi cố gắng tạo tệp pdf bằng cách truy cập http://localhost:3000/contacts/1.pdf nó bị treo. Trong thanh trạng thái nó cho thấy: Waiting for localhost...

Rails máy chủ đầu ra:

Started GET "/contacts/1.pdf" for 127.0.0.1 at 2013-07-28 21:45:06 +0900 
    ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Processing by ContactsController#show as HTML 
    Parameters: {"id"=>"1"} 
    Contact Load (0.3ms) SELECT "contacts".* FROM "contacts" WHERE "contacts"."id" = ? LIMIT 1 [["id", "1"]] 
    Rendered contacts/show.html.erb within layouts/application (1.4ms) 
Completed 200 OK in 99ms (Views: 57.0ms | ActiveRecord: 0.7ms) 

Gemfile:

gem 'pdfkit' 

application.rb:

config.middleware.use "PDFKit::Middleware" 

Theo PDFKit railscast này nên đủ để tạo tệp pdf chỉ bằng cách thêm .pdf ...


UPDATE:

show.html.erb:

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Name:</strong> 
    <%= @contact.name %> 
</p> 

<p> 
    <strong>Age:</strong> 
    <%= @contact.age %> 
</p> 

<%= link_to 'Edit', edit_contact_path(@contact) %> | 
<%= link_to 'Back', contacts_path %> 

layouts/application.html.erb:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Pdftest</title> 
    <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

<%= yield %> 

</body> 
</html> 

CẬP NHẬT 2:

Nhờ @Arman H đã giúp tôi tìm ra rằng tôi phải chỉ định đường dẫn tuyệt đối cho tài sản thay vì đường dẫn tương đối. Khi tôi loại bỏ các dòng sau tôi đã có thể tạo ra tập tin PDF:

<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> 
<%= javascript_include_tag "application", "data-turbolinks-track" => true %> 

Bây giờ, tôi không thể có được làm thế nào để thay thế này với một đường dẫn tuyệt đối . Có vẻ như đây là post là những gì tôi cần, nhưng tôi vẫn không thể hiểu được điều này sẽ như thế nào đối với trường hợp của tôi.

+0

Mất bao lâu? Bạn có gặp bất kỳ lỗi nào từ 'wkhtmltopdf' trong bảng điều khiển Rails 'không? Đôi khi nó xuất hiện để treo, nhưng nó thực sự chỉ mất một thời gian dài để xử lý PDF. Bạn đã chạy nó bao lâu trước khi cắt yêu cầu? –

+0

Sự cố ở trên tôi có trên Mac OS x. Bây giờ tôi đang có trên Linux Mint. Nó vẫn còn "Đang chờ localhost ..." trong 20 phút và có vẻ như điều này sẽ là vô tận. Tôi chỉ phải hủy máy chủ bằng Ctrl + c. – Askar

+0

Khi tôi tắt máy chủ sau 40 phút, nó tạo ra tập tin pdf cho tôi. Tôi đã thử một lần nữa để tắt máy chủ sau 1 phút, trong trường hợp này nó cho thấy: lệnh không thành công:/usr/bin/wkhtmltopdf - thư kích thước trang --margin-top 0.75in --margin-right 0.75in --margin-bottom 0.75in --margin-left 0.75in --encoding UTF-8 --quiet - - – Askar

Trả lời

8

Vấn đề là do stylesheet_link_tagjavascript_include_tag sử dụng URL tương đối, thường gây ra wkhtmltopdf để treo khi tải nội dung từ cùng một máy chủ mà wkhtmltopdf đang chạy.

Sử dụng URL tuyệt đối cho nội dung đã giải quyết được sự cố.

Set asset_host trong cấu hình Rails', mà cũng ảnh hưởng đến stylesheet_link_tagjavascript_include_tag:

# Modify asset host config setting in `config/application.rb` 
# Or create a new initializer: `config/initializers/wkhtmltopdf.rb` 
config.action_controller.asset_host = "http://mysite.com" 

# Or you can have different hosts for development (local) and production (CDN): 
# In `config/environments/development.rb` 
config.action_controller.asset_host = "http://localhost" 
# In `config/environments/production.rb` 
config.action_controller.asset_host = "http://d111111abcdef8.cloudfront.net" 
+0

Cảm ơn! Trong cấu hình, tôi nên chỉnh sửa tệp nào? Tôi không có tên máy chủ, tôi đang chạy ứng dụng localy. Tôi nên chỉ định điều gì trong trường hợp này thay vì "http://mysite.com"? – Askar

+0

Hoặc là 'localhost' hoặc '127.0.0.1' (hoặc bất kỳ IP cục bộ nào bạn nhận được từ bảng điều khiển Rails). –

+0

tôi nên chỉnh sửa tệp nào để thêm config.action_controller.asset_host = "http://mysite.com"? – Askar

3

Thiết config.action_controller.asset_host = "http://localhost" trong development.rb thực sự đã không làm việc cho tôi. Tức là, thế hệ PDF sẽ hoạt động, nhưng sau đó các nội dung sẽ không đi qua khi hiển thị HTML.

Tôi đi theo phương pháp này ở đây: http://jguimont.com/post/2627758108/pdfkit-and-its-middleware-on-heroku

và nó làm việc như một nét duyên dáng cho tôi. Hy vọng điều này sẽ giúp một ai đó. Chỉ cần ném asset.rb trong config/intializers và bạn tốt để đi.

+0

đây là câu trả lời tốt hơn nhiều! cảm ơn!!!!! – Axil

+0

có nghĩa là địa phương ở đâu? phía trước hoặc phụ trợ? – Axil

+0

Bạn có đang truy cập 'localhost' từ địa chỉ IP hay ngược lại không? Tức là, có lẽ bạn đặt 'asset_host =" http: // localhost "' nhưng cố gắng tạo ra thông qua 'http: // 127.0.0.1/my_app/some-route'? –

0

Tôi đã gặp sự cố tương tự khi nhật ký của tôi hiển thị trang đã hiển thị nhưng không có bản pdf nào được tạo và trình duyệt sẽ bị treo. Nó đã kết thúc không có gì để làm với khả năng tương thích hệ điều hành, thiếu các máy ghi âm, đá quý và phụ thuộc nhưng thay vào đó tôi cần phải tăng số lượng tối đa cho phép cho máy chủ Puma của tôi (đã được đặt thành 1) tối đa 2 hoặc nhiều hơn. Điều này sau đó tạo ra pdf như bình thường.

Các vấn đề liên quan