2013-06-16 1 views
1

I (user1) есть скрипт Google Apps, который подключается к экземпляру Cloud SQL, например, так:Использование Cloud SQL обратно заканчивается в многопользовательском Apps Script

var conn = Jdbc.getCloudSqlConnection("jdbc:google:rdbms://blah:instance1/foo") 

И это работает как шарм. Я пытаюсь разделить этот скрипт как библиотеку и, возможно, монетизировать ее в будущем.

Когда я войти в систему как другой пользователь (user2) и добавить его в библиотеку, он терпит неудачу, когда библиотека запускает функцию, которая пытается установить связь:

Failed to establish a database connection. Check connection string, username and password. 

Так что, похоже, как соединение начиная с user2, даже если код, выполняющий соединение, поступает из библиотеки, которая принадлежит пользователю1. Это правда? Есть ли способ сделать эту работу помимо добавления user2 в качестве редактора моего экземпляра Cloud SQL?

ответ

1

Да, это ожидаемое поведение. Библиотека, принадлежащая другому пользователю, не имеет большого значения. Коннектор jdbc cloud-sql разрешает только соединения, если эффективный пользователь может редактировать базу данных.

Чтобы обойти это, вы превратите эту «библиотеку» в webapp, работая как вы и поделились с кем угодно, даже анонимным. Это принимает запросы и команды в вашу базу данных через параметры HTTP (GET или POST). Этот webapp вернет результаты, используя ContentService на любом из text formats available. Я думаю, самый простой из них - JSON, поскольку вы можете работать с обычными js-объектами в Script Apps, а затем просто JSON.stringify и JSON.parse, чтобы сделать сообщение.

Чтобы облегчить вам задачу, вы можете сделать библиотеку для доступа к этой веб-странице, абстрагируя вызовы и параметры UrlFetch, которые у вас есть на первом скрипте, что позволяет легко «родной» плагин другим скриптам.

+0

Благодарим за информацию. Я рассматриваю возможность сделать библиотеку и скрипт webapp одним и тем же скриптом ... в основном, делая библиотеку называть себя через UrlFetch, когда с ней нужно работать. Просто держать вещи в одном и том же месте. Вы видите какой-то особый недостаток этого подхода? – Nelluk

+0

Когда я разрабатываю библиотеку, мне обычно нравится показывать только некоторые конкретные методы. Если вы объединяете все в один и тот же скрипт, может возникнуть сложность в том, чтобы сделать чистое разделение того, что должно быть вызвано как lib, и что такое «бэкэнд». Я бы сделал это отдельно, но это в основном разница в стиле. –