is
сравнивает местоположение памяти. Он используется для сравнения уровня объекта.
==
будет сравнивать переменные в программе. Он используется для проверки на уровне ценности.
is
проверяет эквивалентность уровня адреса
==
проверяет эквивалентность уровня значения
Я проявил другой подход к этой проблеме.
Мои модели имеют 2 поля файла, каждый использует стандартный бэкенд хранилища файлов, и другой использует s3 бэкенд хранилища файлов. То, когда пользователь загружает файл, это добирается, сохранило локально.
у меня есть команда управления в моем приложении, которое загружает все локально хранившие файлы на s3 и обновляет модели.
Поэтому, когда запрос прибывает для файла, я проверяю, чтобы видеть, использует ли объект модели s3 поле устройства хранения данных, раз так я отправляю перенаправление в корректный URL на s3, если не я отправляю перенаправление так, чтобы nginx мог служить файлу от диска.
Эта команда управления может, конечно, быть инициирована любым событием cronjob или что бы то ни было.
Вы могли разъединить процесс:
[*: В случае, если у Вас есть только общий хостинг, Вы могли возможно создать некоторое решение, которое использует скрытый Iframe в пользовательском браузере для запуска сценария, который тогда загружает файл на S3]
Пользователи могут загружать файлы прямо в S3 из своего браузера, используя специальную форму (с зашифрованным документом политики в скрытом поле). Они будут перенаправлены обратно в ваше приложение после завершения загрузки.
Дополнительная информация здесь: http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434