Около 6 недель я пытался выяснить, как решить мою проблему с Parse Server и моими устаревшими PFFiles. Я не собираюсь переносить устаревшие файлы PFFiles, просто использую их при тестировании и разработке, пока Parse их поддерживает. После тестирования установлю файловый адаптер S3.
Мое приложение под управлением IOS 9.3 написано на языке Objective C, хранит изображения и видео и отлично работает при подключении к сайту Parse.com. Я хотел протестировать его с сервером Parse и постепенно исправлять проблемы по мере завершения миграции. Однако мне не удалось исправить (кажущуюся простой) ошибку, возникающую с сообщением {"code":1,"message":"Внутренняя ошибка сервера."}.
Мой MongoDb связан с mLab, и я соответствующим образом включил его URI (и логин) и ключ файла из разбора по мере необходимости. У меня есть информация в моем файле app.config, в среде моего экземпляра сервера синтаксического анализа на AWS и в соответствующих ссылках на данные среды через мой файл index.js.
Если я запрашиваю коллекцию, в которой нет элементов PFFile, то запрос выполняется успешно (т.е. нормально). Однако, если я запрашиваю коллекцию, содержащую PFFiles, запрос завершается с ошибкой {"code":1,"message":"Внутренняя ошибка сервера."}. Я не могу получить даже 1 запись такого неудачного запроса, даже если я использовал SelectKey в попытке обойти объекты PFFile.
Запрос:
PFQuery query = [PFQuery queryWithClassName:CLASSNAME];
query.cachePolicy = kPFCachePolicyNetworkOnly;
[query whereKey:USERNAME equalTo:[[PFUser currentUser]username]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
if (!error)
{
...
}
else NSLog(@" %@", error);
}];
В моем тестировании я хотел бы иметь возможность извлекать устаревшие файлы и тестировать приложение с такими устаревшими данными, которые предположительно легко доступны (согласно Parse.com).
В моем index.js я включил свой Parse fileKey:
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it secret!
serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse', // Don't forget to change to https if needed
filekey: process.env.FILE_KEY || 'no file key',
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
}
});
Я установил ключ среды FILE_KEY для экземпляра nodeS на EC2.
Кроме того, хотя это и излишне, я включил параметр FILE_KEY в файл app.config (примера parse-server).
option_settings:
aws:elasticbeanstalk:application:environment:
PARSE_MOUNT: "/parse"
APP_ID: "ReplaceWithAppID"
MASTER_KEY: "ReplaceWithMasterKey"
DATABASE_URI: "ReplaceWithDatabaseURI"
NODE_ENV: "production"
SERVER_URL: "http://myappname.elasticbeanstalk.com/parse"
FILE_KEY: "Parse Filekey"
aws:elasticbeanstalk:container:nodejs:
NodeCommand: "npm start"
Я изучил предыдущие сообщения и форумы и взглянул на исходный код Parse IOS SDK.
Я понимаю, что fileKey — это префикс для PFFILE, хранящегося на S3 с помощью Parse, и, вероятно, это имя корзины.
Поскольку ни у кого, кажется, нет моей проблемы, это, должно быть, результат серьезного упущения с моей стороны.
Тем не менее, может ли кто-нибудь помочь?