проблема в имиджмагике и граалях - PullRequest
0 голосов
/ 05 сентября 2010

У меня новая проблема в магии изображений, которая выглядит странно .. Я использую Mac OSX Snow Leopard, и я установил магию изображений на нем, и он работает нормально по команде .. но когда я звоню из класса Grails, как в следующем фрагменте, это дает мне «Невозможно запустить программу« конвертировать »: ошибка = 2, нет такого файла или каталога»

код: -

 public static boolean resizeImage(String srcPath, String destPath,String size) {

    ArrayList<String> command = new ArrayList<String>(10);


    command.add("convert");
    command.add("-geometry");
    command.add(size);
    command.add("-quality");
    command.add("100" );
    command.add(srcPath);
    command.add(destPath);

    System.out.println(command);

    return exec((String[])command.toArray(new String[1]));
}

private static boolean exec(String[] command) {
    Process proc;

    try {
        //System.out.println("Trying to execute command " + Arrays.asList(command));
        proc = Runtime.getRuntime().exec(command);
    } catch (IOException e) {
        System.out.println("IOException while trying to execute " );
        for(int i =0 ; i<command.length; i++) {
        System.out.println(command[i]);
        }
        return false;
    }

    //System.out.println("Got process object, waiting to return.");

    int exitStatus;

    while (true) {
        try {
            exitStatus = proc.waitFor();
            break;
        } catch (java.lang.InterruptedException e) {
            System.out.println("Interrupted: Ignoring and waiting");
        }
    }
    if (exitStatus != 0) {
        System.out.println("Error executing command: " + exitStatus);
    }
    return (exitStatus == 0);
}

Я пробовал обычную команду, такую ​​как ls, и все в порядке, поэтому проблема в том, что grails не может найти саму команду конвертирования ... это проблема с ОС или что-то в этом роде?

Ответы [ 4 ]

1 голос
/ 23 марта 2012

(см. Ответ ниже)

Я столкнулся с той же проблемой. Похоже, проблема связана именно с Mac OS X, поскольку у нас есть несколько экземпляров Linux, запущенных без ошибок. Ошибка выглядит следующим образом:

java.io.IOException: не удается запустить программу "/usr/bin/ImageMagick-6.7.3/bin/convert /a/temp/in/tmpPic3143119797006817740.png /a/temp/out/100000726.png": ошибка = 2, нет такого файла или каталога

Все файлы есть, и в каталогах chmod 777 - и, как вы указали, выполнение точной команды из оболочки работает нормально.

Моя теория на данный момент такова, что imagemgick не может загрузить какую-то библиотеку сама по себе, и «нет такого файла» относится к dylib или чему-то в этом роде.

Я попытался установить LD_LIBRARY_PATH и несколько других безрезультатно.


Наконец-то я заработал. Вот как у меня это настроено. Надеюсь, это поможет.

Суть исправления для меня заключалась в том, что я обернул 'convert' в сценарий оболочки, установил несколько переменных окружения и затем вызвал этот сценарий оболочки вместо прямого преобразования:

(convertWrapper.sh)

export MAGICK_HOME=/usr/local/ImageMagick-6.7.5
export MAGICK_CONFIGURE_PATH=${MAGICK_HOME}/etc/ImageMagick:${MAGICK_HOME}/share/doc/ImageMagick/www/source

export PATH=${PATH}:${MAGICK_HOME}/bin
export LD_LIBRARY_PATH=${MAGICK_HOME}/lib:${LD_LIBRARY_PATH}
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${MAGICK_HOME}/lib
export MAGICK_TMPDIR=/private/tmp

echo "$@" >> /private/tmp/m.log 2>&1
/usr/local/ImageMagick-6.7.5/bin/convert -verbose "$@" >> /private/tmp/m.log 2>&1

(convertWrapper.sh)

Кроме того, вызов convert делал довольно сложные вещи, поэтому я добавил параметр '-respect-круглые скобки' (который мог или не мог иметь эффект).

Я не уверен, какая часть настройки переменных среды необходима, поскольку я некоторое время наносил удар в темноте, но так как это только для моей коробки разработки ...

0 голосов
/ 06 сентября 2010

вы можете попробовать один из плагинов Image, которые являются частью экосистемы grails

http://www.grails.org/ImageTools+plugin

путь grails при запуске приложения на сервере, вероятно, отличается отзапуск Java из командной строки

0 голосов
/ 13 июля 2011

Я делаю так:

Поместите файл "convert" в / usr / bin

Затем добавьте в Config.groovy:

gk {
    imageMagickPath = "/usr/bin/convert"
}

Затем в мой ImageService.groovy:

import org.springframework.web.context.request.RequestContextHolder as RCH

[..]

def grailsApplication = RCH.requestAttributes.servletContext.grailsApplication
def imPath = grailsApplication.config.gk.imageMagickPath
def command = imPath + " some_properties"
def proc = Runtime.getRuntime().exec(command)

Таким образом, вы получаете команду вроде: / usr / bin / convert some_properties

И это работает, ноне забудьте поместить файл "convert" в ваше местоположение и использовать его с этим местоположением.

0 голосов
/ 06 сентября 2010

Вам нужно выяснить, на что установлен ваш PATH, когда вы запускаете команду из Java. Он должен отличаться от того, который вы используете при работе с терминала.

Вы используете Grails (через Tomcat?) От имени другого пользователя? У вашего обычного пользователя может быть другой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...