Розділ 2: Налаштування середовища розробки

Залежно від передбачуваного використання Odoo можна встановити кількома способами. Як для розробників із Odoo community, так і для співробітників Odoo кращим способом є встановлення вихідного коду (запуск Odoo з вихідного коду).

Підготуйте середовище

По-перше, дотримуйтесь розділу Налаштування середовища посібника зі створення внеску, щоб підготувати ваше середовище.

Важливо

Наступні кроки призначені лише для співробітників Odoo. Зазначені репозиторії недоступні для третіх осіб.

На даний момент ви повинні були завантажити вихідний код у два локальних сховища, одне для odoo/odoo і одне для odoo/enterprise. Ці репозиторії налаштовані на надсилання змін до попередньо визначених спільних форків на GitHub. Це буде зручно, коли ви почнете робити внесок у кодову базу, але в рамках цього посібника ми хочемо уникнути забруднення спільних сховищ навчальним матеріалом. Тоді давайте розробимо ваш власний модуль у третьому сховищі technical-training-sandbox. Як і перші два репозиторії, він буде частиною addons-path, який посилається на всі каталоги, що містять модулі Odoo.

  1. Дотримуючись того самого процесу, що й у репозиторіях odoo/odoo та odoo/enterprise, відвідайте github.com/odoo/technical-training-sandbox і клацніть кнопку Fork, щоб створити fork репозиторію під вашим обліковим записом.

  2. Клонуйте репозиторій на вашу машину за допомогою:

    $ git clone git@github.com:odoo/technical-training-sandbox.git
    
  3. Налаштуйте репозиторій, щоб надсилати зміни у ваш fork:

    $ cd technical-training-sandbox/
    $ git remote add dev git@github.com:<your_github_account>/technical-training-sandbox.git
    $ git remote set-url --push origin you_should_not_push_on_this_repository
    

Це воно! Тепер ваше середовище готове до запуску Odoo із вихідних кодів, і ви успішно створили репозиторій, який слугуватиме каталогом доповнень. Це дозволить вам передавати свою роботу на GitHub.

Тепер внесіть невеликі зміни в репозиторій technical-training-sandbox, наприклад оновіть файл README.md. Потім дотримуйтеся розділу Зробіть свій перший внесок посібника зі створення внеску, щоб перенести свої зміни на GitHub і створити PR. Це дозволить вам поділитися своєю майбутньою роботою та отримати відгук. Налаштуйте інструкції для використання гілки master і репозиторію technical-training-sandbox.

Щоб забезпечити безперервний цикл зворотного зв’язку, ми рекомендуємо натискати новий комміт, щойно ви досягнете нової віхи, наприклад завершення розділу підручника.

Примітка

Конкретне розташування сховищ у вашій файловій системі не має вирішального значення. Однак для простоти ми припустимо, що ви клонували всі сховища в одному каталозі. Якщо це не так, обов’язково налаштуйте наступні команди відповідним чином, надаючи відповідний відносний шлях від репозиторію odoo/odoo до сховища odoo/technical-training-sandbox.

Запустіть сервер

Запустіть за допомогою odoo-bin

Після встановлення всіх залежностей Odoo можна запустити, запустивши odoo-bin, інтерфейс командного рядка сервера.

$ cd $HOME/src/odoo/
$ ./odoo-bin --addons-path="addons/,../enterprise/,../technical-training-sandbox" -d rd-demo

Існує кілька аргументів командного рядка, які можна використовувати для запуску сервера. У цьому тренінгу вам знадобляться лише деякі з них.

-d <database>

База даних, яка буде використана.

--addons-path <directories>

Список розділених комами каталогів, у яких зберігаються модулі. Ці каталоги скануються на наявність модулів.

--limit-time-cpu <limit>

Запобігайте використанню воркером більше ніж <limit> секунд ЦП для кожного запиту.

--limit-time-real <limit>

Запобігайте обробці запиту воркером довше <limit> секунд.

Порада

  • Аргументи --limit-time-cpu і --limit-time-real можна використовувати, щоб запобігти знищенню робочої частини під час налагодження вихідного коду.

  • Ви можете зіткнутися з помилкою, подібною до AttributeError: модуль '<MODULE_NAME>' не має атрибута '<$ATTRIBUTE'>. У цьому випадку вам може знадобитися повторно встановити модуль за допомогою $ pip install --upgrade --force-reinstall <MODULE_NAME>.
    Якщо ця помилка виникає з кількома модулями, вам може знадобитися перевстановити всі вимоги за допомогою $ pip install --upgrade --force-reinstall -r requirements.txt.
    Ви також можете очистити кеш python, щоб вирішити проблему:
    $ cd $HOME/.local/lib/python3.8/site-packages/
    $ find -name '*.pyc' -type f -delete
    
  • Інші часто використовувані аргументи:

    • -i: інсталюйте деякі модулі перед запуском сервера (список, розділений комами).

    • -u: оновити деякі модулі перед запуском сервера (список, розділений комами).

Увійдіть в Odoo

Відкрийте http://localhost:8069/ у своєму браузері. Ми рекомендуємо використовувати Chrome, Firefox або будь-який інший браузер із засобами розробки.

Щоб увійти як адміністратор, використовуйте такі облікові дані:

  • ел. адреса: admin

  • пароль: admin

Увімкніть режим розробника

Режим розробника або режим налагодження корисний для навчання, оскільки він надає доступ до додаткових (розширених) інструментів. У наступних розділах ми завжди будемо вважати, що ви ввімкнули режим розробника.

Увімкніть режим розробника зараз. Виберіть спосіб, який вам більше подобається; всі вони еквівалентні.

Примітка

Головна сторінка екрана налаштувань доступна, лише якщо встановлено хоча б один додаток. У наступному розділі ви зможете встановити власний додаток.

Додаткові інструменти

Корисні команди Git

Ось кілька корисних команд Git для вашої повсякденної роботи.

  • Переключити гілки:
    Коли ви змінюєте гілки, обидва сховища (odoo та enterprise) мають бути синхронізовані, тобто обидва мають бути в одній гілці.
    $ cd $HOME/src/odoo
    $ git switch 14.0
    
    $ cd $HOME/src/enterprise
    $ git switch 14.0
    
  • Отримати та перебазувати:

    $ cd $HOME/src/odoo
    $ git fetch --all --prune
    $ git rebase --autostash odoo/14.0
    
    $ cd $HOME/src/enterprise
    $ git fetch --all --prune
    $ git rebase --autostash enterprise/14.0
    

Редактор коду

Якщо ви працюєте в Odoo, багато ваших колег використовують VSCode, VSCodium (еквівалент відкритого коду), PyCharm або Sublime Text. Однак ви можете вибрати бажаний редактор.

Важливо правильно налаштувати лінтери. Використання лінтера допомагає вам, показуючи синтаксичні та семантичні попередження або помилки. Вихідний код Odoo намагається дотримуватися стандартів Python і JavaScript, але деякі з них можна ігнорувати.

Для Python ми використовуємо PEP8, ігноруючи ці параметри:

  • E501: line too long

  • E301: expected 1 blank line, found 0

  • E302: expected 2 blank lines, found 1

Для JavaScript ми використовуємо ESLint, і ви можете знайти приклад файлу конфігурації тут.

Інструменти адміністратора для PostgreSQL

Ви можете керувати своїми базами даних PostgreSQL за допомогою командного рядка, як було показано раніше, або за допомогою додатку з графічним інтерфейсом користувача, наприклад pgAdmin або DBeaver.

Щоб підключити додатку графічний інтерфейс користувача до вашої бази даних, ми рекомендуємо підключатися за допомогою сокета Unix.

  • Назва/адреса хосту: /var/run/postgresql

  • Порт: 5432

  • Ім’я користувача: $USER

Налагодження Python

Коли ви стикаєтеся з помилкою або намагаєтеся зрозуміти, як працює код, просто роздрукувати речі може допомогти, але правильний налагоджувач може заощадити багато часу.

Ви можете використовувати класичний налагоджувач бібліотеки Python (pdb, pudb або ipdb), або ви можете скористатися налагоджувачем вашого редактора.

У наступному прикладі ми використовуємо ipdb, але процес подібний до інших бібліотек.

  1. Встановити бібліотеку:

    pip install ipdb
    
  2. Розмістіть тригер (точку зупину):

    import ipdb; ipdb.set_trace()
    

    Example

    def copy(self, default=None):
        import ipdb; ipdb.set_trace()
        self.ensure_one()
        chosen_name = default.get('name') if default else ''
        new_name = chosen_name or _('%s (copy)') % self.name
        default = dict(default or {}, name=new_name)
        return super(Partner, self).copy(default)
    

Ось список команд:

h(elp) [command]

Роздрукувати список доступних команд, якщо аргумент не надано. Використовуючи команду як аргумент, надрукуйте довідку про цю команду.

pp expression

Значення виразу надруковано за допомогою модуля pprint.

w(here)

Надрукуйте трасування стека з останнім кадром внизу.

d(own)

Перемістіть поточний кадр на один рівень нижче в трасуванні стека (до нового кадру).

u(p)

Перемістити поточний кадр на один рівень вище в трасуванні стека (до старішого кадру).

n(ext)

Продовжуйте виконання, доки не буде досягнуто наступного рядка в поточній функції або вона не повернеться.

c(ontinue)

Продовжуйте виконання та зупиняйтеся лише тоді, коли зустрічається точка зупину.

s(tep)

Виконати поточний рядок. Зупиніться при першому можливому випадку (або у функції, яка викликається, або на наступному рядку в поточній функції).

q(uit)

Закрийте налагоджувач. Програма, що виконується, переривається.

Тепер, коли ваш сервер працює, настав час почати написати власний додаток!