2009-09-22 7 views
0

Я работаю над встроенной системой, подробности которой поясняются в конце этого сообщения. Инструменты рубины на linux.Рубиновый код на монтировании NFS, используя другой файл на том же монтировании, вызывает проблемы

Я поместил свой код ruby ​​на удаленное устройство NAS в сети и смонтировал его во встроенную систему. Я работаю над использованием NFS v3. Мой сценарий проекта выглядит следующим образом: есть авто-стартер «все-в-одном», который 1. объединяет долю nfs, 2. запускает рубиновый код webrick на смонтированном каталоге, 3. снова запускает еще один код рубинового кода, основанный на логике, на смонтированном dir, 4. запускает рубиновый код в локальной файловой системе, который выполняет некоторые базовые записи и прочее ... Я помещаю каждый шаг в цикл, который будет повторять попытку при неудачной попытке запуска (запуск операций производится системой «ruby XXXX» или popen3). Вот что происходит, когда я запускаю этот стартер: step1 идет нормально, шаг 2 терпит неудачу, шаг 3 выходит из строя, шаг 4 идет нормально, затем шаги 2 и 3 повторяются, и оба запускаются нормально тоже всегда при втором испытании (Я хочу добавить что начальные коды независимы, поэтому не важно, какой из них начинается первым, а изменение начального порядка не имеет никакого значения).

Я осмотрел эту проблему и выяснил, что это также происходит, когда я запускаю вещи вручную из оболочки и отфильтровываю ее до этого: Мой код webrick загружает файлы .rb, которые находятся в том же каталоге, что и они, и имеют некоторые FileHandlers, используя поддиры в NFS mount и моя логическая логика также загружают файлы .rb из nfs mount. И это, я считаю, является источником моей проблемы (я попытался загрузить эти файлы, используя как абсолютные пути, такие как «/mnt/myMount/myLib.rb» и File.Join, которые оба не имели никакого значения).

Кроме того, в WEBrick filehandlers тоже действуют довольно странно в этом случае, они всегда терпят неудачу в первом запросе файла, а затем успешно на второй запрос, независимо от размера файла.

Подводя итог, как говорится в названии, когда код Ruby на монтировании NFS использует другой файл на одном и том же монтировании, ruby ​​дает EIO (Ошибка входного выхода). Я смог воспроизвести эту проблему, используя простые .rb-файлы (которые просто печатают собственное имя файла), загружая друг друга, как описано в приведенном выше сценарии в моей среде (хотя я не пробовал это на обычном ПК). Как я могу это решить, это о путях, заданных для загрузки/требующих методов или что?

My working envrionment: Устройство, с которым я работаю, - это интеллектуальный считыватель RFID с встроенным компьютером на базе Linux. Единственный изготовитель api/language позволяет и обеспечивает (без выхода из условий лицензии) рубин, и они не дают поддержки для установки дополнительных материалов, и они настроили ядро ​​на устройстве, чтобы сделать установку/компиляцию чего-либо столь же сложного, как возможное. Я могу использовать дополнительный материал ruby, если это просто файлы .rb lib, которые я могу легко включить в свой код, но все, что требует компиляции, - это не-нет. Кроме того, эта система не имеет драгоценного камня.

ответ

0

У меня также были проблемы с файлами, установленными в NFS. MAybe может спросить ядро. До тех пор, возможно, повторите попытку, когда вы столкнетесь с ошибкой, которую вы совершаете? GL. -r

+0

Я уже повторяю ошибку, когда возникает ошибка; это связано со стоимостью большого времени ожидания для пользователя ... –