#ruby-on-rails #ms-access #heroku #sequel #ngrok
#ruby-on-rails #ms-access #heroku #продолжение #ngrok
Вопрос:
У меня есть веб-сайт rails, развернутый на Heroku. Я хочу прочитать файл базы данных Microsoft access, который используется облачной машиной Windows с использованием ngrok. Я попытался использовать sequel gem. Я запускаю этот код
require "sequel"
Sequel.ado(conn_string: 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=https://file_link_path;Jet OLEDB:Database Password=MyDbPassword;')
Я получаю эту ошибку во второй строке
После добавления gem win32ole в файл gem я получаю эту ошибку
Теперь у меня нет идей. Пожалуйста, помогите мне
Заранее благодарю вас
Комментарии:
1. Вы не сможете использовать какой-либо специфичный для Windows код на Heroku, поскольку он не работает под управлением Windows. Это означает, что ОЛЕ вышел из игры. Есть сторонние драйверы, которые могут работать, но вам придется попробовать их. (В сторону: это звучит как ужасная идея. Я бы настоятельно избегал подключаться к любой базе данных, которую вы размещаете внутри брандмауэра, и предоставлять доступ через
ngrok
нее. И если бы это было вообще возможно, я бы полностью избавился от Access, хотя и признаю, что это может быть легче сказать, чем сделать.)2. Да, короткий ответ на этот вопрос: нет. Длинный ответ: да, все возможно, но вы столкнетесь с множеством препятствий, и после преодоления всех из них, скорее всего, это все равно будет нестабильная мерзость.
3. @Chris если вы застряли с Access, я бы предположил, что приемлемым решением было бы создать сервер API на платформе Windows (Azure?) и позволить ему взаимодействовать с БД? Затем приложение Rails связывается с API через HTTP.
4. 1) Увеличьте размер базы данных до SQL server. 2) Хост в Azure. Для вашего собственного здравомыслия удалите Access из стека.
Ответ №1:
Доступ основан на файлах, а не на сервисах. Итак, вам нужно прочитать / записать файл, и вам нужна файловая система, совместимая с Windows. Вы не можете использовать http или даже ftp. Это не прямые протоколы чтения / записи файлов. Итак, вам не только нужна возможность прямого чтения / записи файлов, но вы ТАКЖЕ должны использовать совместимую файловую сеть Windows. Итак, скажем, если вы разместите этот файл в окне Linux, вам нужно запустить samba для создания совместимого с Windows сетевого подключения к файлам, и ТОГДА и ТОЛЬКО тогда вы сможете напрямую открыть этот файл для чтения / записи.
на самом деле это ничем не отличается от открытия файла Word или даже текстового файла. Вы НЕ подключаетесь к текстовому файлу. вы, конечно, можете извлечь donwload этот файл из souce, а ЗАТЕМ прочитать / обработать файл локально. (предположим, что у вас есть локальный код JET или ACE data engine, чтобы затем открыть прочитать файл.
Итак, лошадь — это лошадь.
И
Файл — это файл — это файл.
Вы больше не подключаетесь к текстовому файлу, а затем к файлу Excel или, в данном случае, к файлу Access. Такой концепции http-соединения не существует. Как уже отмечалось, вы можете использовать что-то вроде, скажем, FTP или http для загрузки файла туда, где выполняется ваш код, а затем в этот момент вы можете открыть прочитать этот локальный файл. Но вы не подключаетесь к «файлу» и не можете подключиться к файловой базе данных, такой как JET / ACE. (то же, что и sqlite — это локальная файловая система, а не служба, запущенная на другом конце). Так что это действительно просто файл, находящийся в какой-то папке. И, таким образом, использовать этот файл по сети? Ну, либо вы копируете файл локально, либо можете попытаться открыть файл ПО сети. Но это, как уже отмечалось, означает, что вам нужно программное обеспечение (в данном случае Access data engine), работающее локально, и для этой команды open по сети для этого потребуется VPN — не какое-то сокет-соединение, а не какое-то http-соединение — эти протоколы не могут открыть прочитать файл — они, безусловно, могут открыть прочитайте локальный файл, а затем, возможно, передайте данные через http, но вы больше не можете открывать этот файл удаленно, тогда вы сможете открывать файлы на amazon.com серверов тоже нет — они находятся за веб-сайтом.