How do I move App from Server 1 to Server 2?

I’ve currently setup 2 development server, server 1 and server 2. I’ve created an app using the make-app function in Server 1 and have completed development. How do I move it to server 2 and make it work?

I’ve manually copied the app folder from /apps and updated apps.txt on Server 2 but I will get error whenever I try running bench start.

05:37:42 workerbeat.1         | celery beat v3.1.19 (Cipater) is starting.
05:37:42 workerbeat.1         | Traceback (most recent call last):
05:37:42 workerbeat.1         |   File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
05:37:42 workerbeat.1         |     "__main__", fname, loader, pkg_name)
05:37:42 workerbeat.1         |   File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
05:37:42 workerbeat.1         |     exec code in run_globals
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/apps/frappe/frappe/celery_app.py", line 224, in <module>
05:37:42 workerbeat.1         |     app.start()
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/app/base.py", line 201, in start
05:37:42 workerbeat.1         |     app=self).execute_from_commandline(argv)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 770, in execute_from_commandline
05:37:42 workerbeat.1         |     super(CeleryCommand, self).execute_from_commandline(argv)))
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 311, in execute_from_commandline
05:37:42 workerbeat.1         |     return self.handle_argv(self.prog_name, argv[1:])
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 762, in handle_argv
05:37:42 workerbeat.1         |     return self.execute(command, argv)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 694, in execute
05:37:42 workerbeat.1         |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 315, in run_from_argv
05:37:42 workerbeat.1         |     sys.argv if argv is None else argv, command)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 377, in handle_argv
05:37:42 workerbeat.1         |     return self(*args, **options)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 274, in __call__
05:37:42 workerbeat.1         |     ret = self.run(*args, **kwargs)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/beat.py", line 79, in run
05:37:42 workerbeat.1         |     return beat().run()
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/apps/beat.py", line 81, in run
05:37:42 workerbeat.1         |     self.init_loader()
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/apps/beat.py", line 121, in init_loader
05:37:42 workerbeat.1         |     self.app.loader.init_worker()
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 128, in init_worker
05:37:42 workerbeat.1         |     self.import_default_modules()
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 116, in import_default_modules
05:37:42 workerbeat.1         |     signals.import_modules.send(sender=self.app)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/utils/dispatch/signal.py", line 166, in send
05:37:42 workerbeat.1         |     response = receiver(signal=self, sender=sender, **named)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/amqp/utils.py", line 42, in __call__
05:37:42 workerbeat.1         |     self.set_error_state(exc)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/amqp/utils.py", line 39, in __call__
05:37:42 workerbeat.1         |     **dict(self.kwargs, **kwargs) if self.kwargs else kwargs
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/app/base.py", line 330, in _autodiscover_tasks
05:37:42 workerbeat.1         |     self.loader.autodiscover_tasks(packages, related_name)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 251, in autodiscover_tasks
05:37:42 workerbeat.1         |     related_name) if mod)
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 272, in autodiscover_tasks
05:37:42 workerbeat.1         |     return [find_related_module(pkg, related_name) for pkg in packages]
05:37:42 workerbeat.1         |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 289, in find_related_module
05:37:42 workerbeat.1         |     pkg_path = importlib.import_module(package).__path__
05:37:42 workerbeat.1         |   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
05:37:42 workerbeat.1         |     __import__(name)
05:37:42 workerbeat.1         | ValueError: Empty module name
05:37:42 worker.1             | Traceback (most recent call last):
05:37:42 worker.1             |   File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
05:37:42 worker.1             |     "__main__", fname, loader, pkg_name)
05:37:42 worker.1             |   File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
05:37:42 worker.1             |     exec code in run_globals
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/apps/frappe/frappe/celery_app.py", line 224, in <module>
05:37:42 worker.1             |     app.start()
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/app/base.py", line 201, in start
05:37:42 worker.1             |     app=self).execute_from_commandline(argv)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 770, in execute_from_commandline
05:37:42 worker.1             |     super(CeleryCommand, self).execute_from_commandline(argv)))
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 311, in execute_from_commandline
05:37:42 worker.1             |     return self.handle_argv(self.prog_name, argv[1:])
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 762, in handle_argv
05:37:42 worker.1             |     return self.execute(command, argv)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/celery.py", line 694, in execute
05:37:42 worker.1             |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/worker.py", line 179, in run_from_argv
05:37:42 worker.1             |     return self(*args, **options)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/base.py", line 274, in __call__
05:37:42 worker.1             |     ret = self.run(*args, **kwargs)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/bin/worker.py", line 212, in run
05:37:42 worker.1             |     state_db=self.node_format(state_db, hostname), **kwargs
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/worker/__init__.py", line 95, in __init__
05:37:42 worker.1             |     self.app.loader.init_worker()
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 128, in init_worker
05:37:42 worker.1             |     self.import_default_modules()
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 116, in import_default_modules
05:37:42 worker.1             |     signals.import_modules.send(sender=self.app)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/utils/dispatch/signal.py", line 166, in send
05:37:42 worker.1             |     response = receiver(signal=self, sender=sender, **named)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/amqp/utils.py", line 42, in __call__
05:37:42 worker.1             |     self.set_error_state(exc)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/amqp/utils.py", line 39, in __call__
05:37:42 worker.1             |     **dict(self.kwargs, **kwargs) if self.kwargs else kwargs
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/app/base.py", line 330, in _autodiscover_tasks
05:37:42 worker.1             |     self.loader.autodiscover_tasks(packages, related_name)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 251, in autodiscover_tasks
05:37:42 worker.1             |     related_name) if mod)
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 272, in autodiscover_tasks
05:37:42 worker.1             |     return [find_related_module(pkg, related_name) for pkg in packages]
05:37:42 worker.1             |   File "/home/ubuntu/frappe-bench/env/local/lib/python2.7/site-packages/celery/loaders/base.py", line 289, in find_related_module
05:37:42 worker.1             |     pkg_path = importlib.import_module(package).__path__
05:37:42 worker.1             |   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
05:37:42 worker.1             |     __import__(name)
05:37:42 worker.1             | ValueError: Empty module name
05:37:42 system               | workerbeat.1 stopped (rc=1)
05:37:42 system               | sending SIGTERM to worker.1 (pid 24756)
05:37:42 system               | sending SIGTERM to web.1 (pid 24761)
05:37:42 system               | sending SIGTERM to socketio.1 (pid 24757)
05:37:42 system               | sending SIGTERM to redis_async_broker.1 (pid 24758)
05:37:42 system               | sending SIGTERM to redis_cache.1 (pid 24760)
05:37:42 redis_async_broker.1 | [24765 | signal handler] (1446961062) Received SIGTERM, scheduling shutdown...
05:37:42 redis_cache.1        | [24771 | signal handler] (1446961062) Received SIGTERM, scheduling shutdown...
05:37:42 system               | socketio.1 stopped (rc=-15)
05:37:42 system               | worker.1 stopped (rc=-15)
05:37:42 system               | web.1 stopped (rc=-15)
05:37:42 redis_async_broker.1 | [24765] 08 Nov 05:37:42.636 # User requested shutdown...
05:37:42 redis_async_broker.1 | [24765] 08 Nov 05:37:42.636 # Redis is now ready to exit, bye bye...
05:37:42 system               | redis_async_broker.1 stopped (rc=-15)
05:37:42 redis_cache.1        | [24771] 08 Nov 05:37:42.648 # User requested shutdown...
05:37:42 redis_cache.1        | [24771] 08 Nov 05:37:42.648 # Redis is now ready to exit, bye bye...
05:37:42 system               | redis_cache.1 stopped (rc=-15)

Am I missing out some steps to move the apps between 2 servers?

bench get-app and then bench install-app

see bench --help

I know the question is extremely old but I have put it here for the ref as found it difficult to find docs in regards…

Create a new project on GitHub and upload and sync the app folder. frappe-bech/apps/

In frappe issue the command: bench get-app git repo-url

Then install the application in the instance with bench install-app app-name

Update the the frappe/erpnext installation as this will also sync the database with the command bench update

Reload the frappe/erpnext instance by killing the process and issuing bench restart or by restarting the supervisor
daemon: service supervisor restart

Last step if you are using the nginx/supervisor setup otherwise just kill and restart with bench restart

4 Likes