Проблема Heroku при попытке загрузить файл .CSV в локальную папку загрузки - PullRequest
0 голосов
/ 31 октября 2019

У меня есть требование, чтобы иметь возможность загружать сведения о посетителях из таблицы SQL в файл CSV.

Приведенный ниже код отлично работает для моего локального развертывания, создавая файл .csv в / app / staticдиректория, которую оператор Return загружает на мой рабочий стол.

При загрузке в Heroku тот же код завершается с ошибкой в ​​последней строке (Return), указывая:

'FileNotFoundError: [Errno 2] No such file or directory: '/app/app/static/users1001.csv' 

Это говорит о том, что он создал файл всервер, но ищет в неправильном месте (дополнительный «/ приложение»). Тем не менее, нигде не было создано ни одного файла (я проверял с помощью Heroku Run Bash). Код:

        name = 'attendees' + str(name)     # name = 1001 in this example
        f = open('%s.csv' % name, 'w')
        out = csv.writer(f)
        out.writerow([ 'Date','Activity No','Activity', 'User No', 'User Name',\
                      'Cost','Received','Update Time'\
                      ])
        for item in Attendees.query.filter_by(club=current_user.club)\
                .order_by(Attendees.activitydate.desc(),Attendees.activityname):
            out.writerow([item.activitydate, item.activitynumber,\
                          item.activityname,item.usernum,\
                          item.username,item.cost,item.received,item.update_time])
        path='static/'+name+'.csv'     # this was necessary for the local deployment
                                       # csv writer send to 'static' by default but 
                                       # send_file needs it stated explicitly
        f.close()
    return send_file(path, as_attachment=True)

Поэтому мой вопрос: кто-нибудь знает, где этот файл хранится в Heroku, чтобы я мог завершить загрузку?

Еще одна морщина, которую я не могу объяснить. Если я запускаю это для клуба 1002 (не 1001), код работает и загружает файл accedees1002.csv (это файл, который я создал локально и был загружен в Heroku с помощью GIT). Ниже вы увидите, что этот файл на самом деле находится в / app / static / temp, что действительно сбивает с толку.

From Heroku Run Bash:

~/app/static $ dir
1002.csv  clubmanager2020.jpg  code39_barcode.svg  eds.jpg   loading.gif  ratings.csv
bwt.jpg   clubmanager2020.png  dump.csv            eetc.jpg  out.csv      temp
~/app/static $ cd temp
~/app/static/temp $ dir
attendees1002.csv  out.csv  ratings.csv  users1002.csv

Любая помощь с благодарностью

1 Ответ

0 голосов
/ 01 ноября 2019

Я нашел некоторую документацию, чтобы решить эту проблему. Heroku не позволяет создавать файлы в системе, кроме как в каталоге / tmp вне корневого каталога. Проблема была исправлена ​​путем изменения:

name = 'attendees' + str(name)  

на

../../tmp/name = 'attendees' + str(name)  

и

path='static/'+name+'.csv'

на

path=name+'.csv'
...