Запрос на получение запроса работает в режиме тестирования, но не работает - Google App Engine - PullRequest
0 голосов
/ 28 октября 2018

Я создал свой собственный API, используя облачную оболочку с редактором движка приложений Google.Вот фрагмент кода, который отлично работает в тестировании:

app.get('/fetch_ticker', (req, res) => {
    (async() => {
        let pair = req.param('pair', "BTC/ETH");
        let ex = req.param('exchange', "coinmarketcap");
        let myArr = [];
        let exchange = await new ccxt[ex]();
        let tickers = await exchange.fetchTicker(pair);

        myArr.push(tickers);

        //Send req
        res.status(200).send(myArr);
    })()
});

Теперь, когда я пробую его после 'Gcloud app deploy' и запускаю его в работе, другие запросы get работают нормально, но когда 'ex 'равен' coinmarketcap ', он просто постоянно загружается и в итоге выдает 500 ошибок.

Обновление:

Вот лог:

2018-11-03 11:43:50 default[20181103t163752]  ==== JS stack trace =========================================
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752]  Security context: 0x3e6826325879 <JSObject>
2018-11-03 11:43:50 default[20181103t163752]      1: indexBy(aka indexBy) [/srv/node_modules/ccxt/js/base/functions/generic.js:~82] [pc=0x30a50d2a5374](this=0x32f
9351022d1 <undefined>,/* anonymous */=0x1e7ccf12dc59 <JSArray[37746]>,/* anonymous */=0x32f935144e51 <String[2]: id>,/* anonymous */=0x32f9351022d1 <undefined>)
2018-11-03 11:43:50 default[20181103t163752]      2: arguments adaptor frame: 2->3
2018-11-03 11:43:50 default[20181103t163752]      3: set_markets(aka setMarkets) [/srv/node_modules/ccxt/js/base/Exchange.js:613] ...
2018-11-03 11:43:50 default[20181103t163752]
2018-11-03 11:43:50 default[20181103t163752]  FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
2018-11-03 11:43:50 default[20181103t163752]   1: node::Abort() [node]

Iпопытался увеличить объем памяти, используя узел --max_old_space_size = 4096 app.js, но ошибка все еще остается.

1 Ответ

0 голосов
/ 28 октября 2018

Включенный вами журнал - это просто общий журнал запросов.Я не уверен, предоставляет ли среда nodejs журналы / подробности приложений и, если да, как вы к ним обращаетесь.По крайней мере, в стандартной среде Python такие журналы (доступные, как показано в Чтение журналов приложений в Google App Engine из консоли разработчика ), как правило, содержат сообщение об ошибке или трассировку, очень полезную для выявления реальной проблемы.Без таких подробностей это скорее догадки, что я и сделаю ниже:)

Возможно, coinmarketcap обмен на самом деле не поддерживает fetchTicker, в то время как ваш код предполагает, что все обмены поддерживаютЭто.Пример из ccxt Manual на самом деле имеет проверку для этого:

// JavaScript
if (exchange.has['fetchTicker']) {
    console.log (await (exchange.fetchTicker ('BTC/USD'))) // ticker for BTC/USD

Или сервер обмена coinmarketcap имеет некоторое (временное) отключение некоторого вида.Или больше не обслуживает данные в тех же условиях или с тем же форматом, который ожидался библиотекой ccxt, и в этом случае я бы заменил их в качестве обмена по умолчанию, чтобы использовать тот, который ведет себя нормально.

Обновление:

ОК, журнал ошибок указывает на проблему выделения памяти.Типичная причина - недостаточная память экземпляра приложения.Вы можете решить эту проблему с помощью конфигурации app.yaml, в зависимости от используемой среды GAE:

...