Ruby on Rails, Paperclip: команда «идентифицировать» работает в cmd, но не в приложении - PullRequest
3 голосов
/ 13 февраля 2011

Я установил ImageMagick на 64-разрядную версию Windows 7, и у меня есть Paperclip Gem.Моя модель пользователя выглядит следующим образом:

   class User < ActiveRecord::Base
  # Paperclip
  has_attached_file :photo,
    :styles => {
      :thumb=> "100x100#",
      :small  => "150x150>" }
  end

В paperclip.rb и development.rb у меня есть:

Paperclip.options[:command_path] = 'C:/Program Files/ImageMagick-6.6.7-Q16'

Моя _форма выглядит следующим образом:

    <%= form_for(@user, :html => { :multipart => true } )  do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :username %><br />
    <%= f.text_field :username %>
  </div>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :crypted_password %><br />
    <%= f.text_field :crypted_password %>
  </div>
  <div class="field">
    <%= f.label :password_salt %><br />
    <%= f.text_field :password_salt %>
  </div>
 <%= f.file_field :photo%>
  <div class="actions">
    <%= f.submit %>
  </div>

<% end %>

enter code here

Я получаю следующую ошибку при загрузке изображения:

[paperclip] An error was received while processing: #<Paperclip::NotIdentifiedByImageMagickError: C:/Users/John/AppData/Local/Temp/stream20110212-6576-1us1cdl.png is not recognized by the 'identify' command.>  

Я могу использовать идентификатор в моем cmd для этого изображения, и он возвращает метаданные об изображении без проблем.

Пожалуйста, помоги, если можешь.Я застрял на этой проблеме более одного дня.

Ответы [ 3 ]

7 голосов
/ 18 июня 2011

Это связано с ошибкой в ​​самоцвете Скрепка в lib/paperclip/command_line.rb файле .

def full_path(binary)
  [self.class.path, binary].compact.join("/")
end

Функция full_path генерирует имя командного файла с обратной косой чертой.

"C:\Program Files\ImageMagick-6.7.0-Q16"/identify

Эта команда не выполняется в Windows, поскольку оболочка cmd выдает ошибку, когда командный файл имеет длинное имя с обратной косой чертой.

Существует два способа решения проблемы.

Используйте короткое имя файла в качестве пути команды.

Paperclip.options[:command_path] = 'C:/PROGRA~1/IMAGEM~1.0-Q'

Примечание : Вы можете получить краткое имя файла следующим образом:

dir /x "C:\Program Files*"
dir /x "C:\Program Files\ImageMagick-6.7.0-Q16*"

Обезьяна залатала камень "Скрепка" в config\initializers\paperclip.rb.

Я проверял это на 2.3.11.

class Paperclip::CommandLine
  def full_path(binary)
    [self.class.path, binary].compact.join(File::ALT_SEPARATOR||File::SEPARATOR)
  end
end

Теперь команда identify генерируется с правильным разделителем пути.

"C:\Program Files\ImageMagick-6.7.0-Q16"\identify

Я предпочитаю второй подход, так как command_path проще в настройке.

4 голосов
/ 20 марта 2011

Обновлен следующий файл в development.rb, и он начал работать

Paperclip.options[:command_path] = 'C:/Progra~1/ImageM~1.8-q'

Это было на 32-битном сервере Windows 2008

0 голосов
/ 10 марта 2011

Откройте командную строку и введите echo %path% ваш путь к изображению должен появиться там.

Также попробуйте изменить :command_path на C:/Progra~1/ImageM~1

...