Closed Mortal closed 5 years ago
@Tyilo @neic Jeg har deployet denne PR på prodekanus da BEST opdagede at kalenderen på hjemmesiden ikke fulgte med Google-kalenderfeedet. Hvis der er en bedre måde må I sige til. Jeg prøvede at ændre cronjobbet til script -qc "bash -i /home/tkammer/tkweb/cron.sh >>/home/tkammer/tkweb/cron.log 2>&1" /dev/null
(thi dette sætter $PATH korrekt), men det er grimt, er ikke i Git, og løste ikke problemet; click brokker sig over ASCII locale og foreslår at sætte LC_ALL=C.UTF-8
:
Traceback (most recent call last):
File "/home/tkammer/.local/bin/pipenv", line 11, in <module>
sys.exit(cli())
File "/home/tkammer/.local/lib/python3.5/site-packages/pipenv/vendor/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/home/tkammer/.local/lib/python3.5/site-packages/pipenv/vendor/click/core.py", line 676, in main
_verify_python3_env()
File "/home/tkammer/.local/lib/python3.5/site-packages/pipenv/vendor/click/_unicodefun.py", line 118, in _verify_python3_env
'for mitigation steps.' + extra)
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult http://click.pocoo.org/python3/for mitigation steps.
This system supports the C.UTF-8 locale which is recommended.
You might be able to resolve your issue by exporting the
following environment variables:
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Hvad med at lave en .env
fil (ved siden af Pipfile
) der indeholder:
LC_ALL=C.UTF-8
LANG=C.UTF-8
Virker det?
Det er vel ikke sikkert at venv altid ligger der. Jeg syntes dog det er fint for nu. Når vi får det i docker https://github.com/TK-IT/meta/issues/18, kan vi tilføje cronjobbet til vores Dockerfile.
Jeg er netop nu ved at få ddweb
i docker. Jeg tænker ikke der går så lang tid inden jeg også gør det med tkweb
.
Hvad med at lave en
.env
fil (ved siden afPipfile
) der indeholder: ...
Den fil bliver vel ikke brugt på nogen magisk vis? Mener du at source filen i cron.sh? Filens tilstedeværelse ændrer ikke fejlen fra pipenv:
(tkweb)tkammer@prodekanus:~/tkweb$ cat .env
LC_ALL=C.UTF-8
LANG=C.UTF-8
(tkweb)tkammer@prodekanus:~/tkweb$ env -i /bin/bash -ic pipenv
Traceback (most recent call last):
...
Det er vel ikke sikker at venv altid ligger der.
Vores readme-prodekanus.md sikrer at venv altid ligger i .venv
.
Den fil bliver vel ikke brugt på nogen magisk vis? Mener du at source filen i cron.sh? Filens tilstedeværelse ændrer ikke fejlen fra pipenv:
Jo det skulle den gerne: https://github.com/pypa/pipenv/blob/master/docs/advanced.rst#-automatic-loading-of-env
Vores readme-prodekanus.md sikrer at venv altid ligger i .venv.
Super. Ved nærmere eftertanke, så bruger man nok nærmere ./manage.py updateical
end cron.sh
under udvikling.
Den fil bliver vel ikke brugt på nogen magisk vis? Mener du at source filen i cron.sh? Filens tilstedeværelse ændrer ikke fejlen fra pipenv:
Jo det skulle den gerne: https://github.com/pypa/pipenv/blob/master/docs/advanced.rst#-automatic-loading-of-env
Den loader filen, men den gør det sikkert for sent til at det løser det indeværende problem:
tkammer@prodekanus:~/tkweb$ echo $LANG
en_US.UTF-8
tkammer@prodekanus:~/tkweb$ pipenv shell
Loading .env environment variables...
Launching subshell in virtual environment…
tkammer@prodekanus:~/tkweb$ . /home/tkammer/tkweb/.venv/bin/activate
(tkweb)tkammer@prodekanus:~/tkweb$ echo $LANG
C.UTF-8
Hmm, en_US.UTF-8
burde også være fint. Er der andre LC eller LANG
variable defineret i env'et?
On Wed, Aug 15, 2018, 12:22 Mathias Rav notifications@github.com wrote:
Den fil bliver vel ikke brugt på nogen magisk vis? Mener du at source filen i cron.sh? Filens tilstedeværelse ændrer ikke fejlen fra pipenv:
Jo det skulle den gerne: https://github.com/pypa/pipenv/blob/master/docs/advanced.rst#-automatic-loading-of-env
Den loader filen, men den gør det sikkert for sent til at det løser det indeværende problem:
tkammer@prodekanus:~/tkweb$ echo $LANG en_US.UTF-8 tkammer@prodekanus:~/tkweb$ pipenv shell Loading .env environment variables... Launching subshell in virtual environment… tkammer@prodekanus:~/tkweb$ . /home/tkammer/tkweb/.venv/bin/activate (tkweb)tkammer@prodekanus:~/tkweb$ echo $LANG C.UTF-8
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/TK-IT/web/pull/224#issuecomment-413156037, or mute the thread https://github.com/notifications/unsubscribe-auth/AAiq5HRaC3hDcD2cUdUOj1JRNhPMXGEpks5uQ_ZLgaJpZM4V926f .
en_US.UTF-8
bliver sat et eller andet sted for login og/eller interactive shells, men bliver ikke sat for cron. pipenv virker fint i en almindelig interactive shell når locale er en_US.UTF-8
, og i dette tilfælde læser pipenv fint .env
filen.
cron sætter intet locale, og så nægter pipenv at køre inden den opdager at der findes en .env
fil.
En anden løsning er at skifte fra Python 3.5 til Python 3.7 hvor problemet er løst med PEP 538:
Accordingly, this PEP proposes that [...] the way the CPython implementation handles the default C locale be changed to be roughly equivalent to the following existing configuration settings (supported since Python 3.1):
LC_CTYPE=C.UTF-8 PYTHONIOENCODING=utf-8:surrogateescape
Følgende er kørt på min Arch Linux maskine (env -i
fjerner alle environment variables):
rav@novascotia:~$ env -i .pyenv/versions/3.6.6/bin/python -c 'import sys; print(sys.getfilesystemencoding())'
ascii
rav@novascotia:~$ env -i python3.7 -c 'import sys; print(sys.getfilesystemencoding())'
utf-8
Og på prodekanus:
rav@prodekanus:~$ env -i python3.5 -c 'import sys; print(sys.getfilesystemencoding())'
ascii
@Mortal django 1.11 LTS understøtter ikke python 3.7. Se også #205.
Vores readme-prodekanus.md sikrer at venv altid ligger i .venv.
Super. Ved nærmere eftertanke, så bruger man nok nærmere
./manage.py updateical
endcron.sh
under udvikling.
Ud fra denne observation merger jeg. Desuden har vi kørt med denne PR i production i en måned nu.
Since pipenv is not installed on the system $PATH, and pipenv uses click which requires a non-ASCII locale, it is quite a bother to use pipenv in a crontab. Just use the standard virtualenv location instead to locate the Python interpreter.