2012-06-07 3 views
2

Я пытаюсь выполнить модуль phantom.js из рельсов. Пока я успешно установил двоичный файл, и путь для phantomjs, похоже, работает нормально.Как установить путь для системного вызова внутри приложения Rails?

Однако, когда я пытаюсь запустить его из приложения rails с использованием обратного хода (например: phantomjs rasterize.js http://google.com 1.jpg), он говорит «Нет такого файла или каталога».

Я думаю, причина в том, что он не может найти путь для rasterize.js Я попытался поместить файл rasterize.js в # {Rails.root}, внутри общей папки, внутри папки контроллера, но ничего не работает.

Как я могу решить эту проблему?

====

UPDATE: Чтобы уточнить, я отправляю код, который работает внутри моего контроллера и который не делает.

def create 
    'phantomjs' 
end 

< = Выше код не выплюнуть ошибки пути, и когда я посылаю запрос от браузера, phantomjs процесса делает получить вызывается, в результате открытия консоли на стороне сервера.

def create 
    'phantomjs rasterize.js' 
end 

< = Это не работает, и он выплевывает ошибку, говорящую «Нет такого файла или каталога», и именно поэтому я думаю, что он должен делать с рельсов не в состоянии найти путь rasterize.js'S. Я попытался поместить rasterize.js в общую папку, внутри папки контроллеров и внутри основного каталога: # {Rails.root}, но это всегда одно и то же.

+0

Можете ли вы показать код? –

+0

Существует не так много кода. Кажется, что это явно проблема пути, и я немного обновил вопрос ... – Vlad

+0

Попробуйте установить путь явно как '' phantomjs # {Rails.root} /rasterize.js "' – Stefan

ответ

0

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

%x("/usr/local/bin/phantomjs /Users/e/Dropbox/Projects/rails/screenshots/rasterize.js http://google.com app/assets/images/2709.jpg") 

< = Это не работает.

system("/usr/local/bin/phantomjs /Users/e/Dropbox/Projects/rails/screenshots/rasterize.js http://google.com app/assets/images/2709.jpg") 

< = Это работает.

Я думал, что все они работают внутренне одинаково, за исключением возвращаемых значений? Может, я ошибся?

+0

Не используйте кавычки внутри '% x (...)'. Кроме того, я заметил, что в обновлении вашего вопроса вы добавляете одинарные кавычки вокруг команд вместо обратных ссылок. Это опечатка? – echristopherson

0

Скажите, что ваша команда cmd. Важно знать, что %(cmd) и exec(cmd), измените процесс, на котором вы находитесь, поэтому, если вы находитесь в рельсах и сменили каталог, он выйдет. С другой стороны, `cmd` и system(cmd) позволят вам работать.

Я узнал, что из этого блога. http://blog.jayfields.com/2006/06/ruby-kernel-system-exec-and-x.html

Смежные вопросы