diff --git a/readthedocs/extra/advanced-usage/.DS_Store b/readthedocs/extra/advanced-usage/.DS_Store new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and b/readthedocs/extra/advanced-usage/.DS_Store differ diff --git a/readthedocs/extra/advanced-usage/sessions.rst b/readthedocs/extra/advanced-usage/sessions.rst index ae2b03ad..f69440e7 100644 --- a/readthedocs/extra/advanced-usage/sessions.rst +++ b/readthedocs/extra/advanced-usage/sessions.rst @@ -44,3 +44,53 @@ methods. For example, you could save it on a database: You should read the ````session.py```` source file to know what "relevant data" you need to keep track of. + + +Sessions and Heroku +------------------- + +You probably have a newer version of SQLite installed (>= 3.8.2). Heroku uses +SQLite 3.7.9 which does not support `WITHOUT ROWID`. So, If you generated your +session file on a system with SQLite >= 3.8.2 your session file will not work +on Heroku's platform and will throw a corrupted schema error. + +There are multiple ways to solve this, the easiest of which is generating a +session file on your Heroku dyno itself. The most complicated is creating +a custom buildpack to install SQLite >= 3.8.2. + + +Generating Session File on a Heroku Dyno +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Do not restart your application Dyno at any point prior to retrieving your +session file. Constantly creating new session files from Telegram's API will +result in a 24 hour rate limit ban** + +Due to Heroku's ephemeral filesystem all dynamically generated +files not part of your applications buildpack or codebase are destroyed upon +each restart. + +Using this scaffolded code we can start the authentication process: + + .. code-block:: python + + client = TelegramClient('login.session', api_id, api_hash, + update_workers = 1, spawn_read_thread = False) + client.start() + +At this point your Dyno will crash because you cannot access stdin. Open your +Dyno's control panel on the Heroku website and "run console" from the "More" +dropdown at the top right. Enter `bash` and wait for it to load. + +You will automatically be placed into your applications working directory. +So run your application `python app.py` and now you can complete the input +requests such as "what is your phone number" etc. + +Once you're successfully authenticated exit your application script with +CTRL + C and `ls` to confirm `login.session` exists in your current directory. +Now you can create a git repo on your account and commit `login.session` to +that repo. + +You cannot ssh into your Dyno instance because it has crashed, so unless you +programatically upload this file to a server host this is the only way to get +it off of your Dyno.