docs: def launch():
      """Launch the experiment."""
      try:
          exp = Experiment(db.init_db(drop_all=False))
      except Exception as ex:
          return error_response(
              error_text="Failed to load experiment in /launch: {}".format(str(ex)),
              status=500,
              simple=True,
          )
      try:
          exp.log("Launching experiment...", "-----")
      except IOError as ex:
          return error_response(
              error_text="IOError writing to experiment log: {}".format(str(ex)),
              status=500,
              simple=True,
          )
  
      try:
          recruitment_details = exp.recruiter.open_recruitment(
              n=exp.initial_recruitment_size
          )
          session.commit()
      except Exception as e:
          return error_response(
              error_text="Failed to open recruitment, check experiment server log "
              "for details: {}".format(str(e)),
              status=500,
              simple=True,
          )
  
      for task in exp.background_tasks:
          try:
              gevent.spawn(task)
          except Exception:
              return error_response(
                  error_text="Failed to spawn task on launch: {}, ".format(task)
                  + "check experiment server log for details",
                  status=500,
                  simple=True,
              )
  
      if _config().get("replay", False):
          try:
              task = ReplayBackend(exp)
              gevent.spawn(task)
          except Exception:
              return error_response(
                  error_text="Failed to launch replay task for experiment."
                  "check experiment server log for details",
                  status=500,
                  simple=True,
              )
  
      # If the experiment defines a channel, subscribe the experiment to the
      # redis communication channel:
      if exp.channel is not None:
          try:
              from dallinger.experiment_server.sockets import chat_backend
  
              chat_backend.subscribe(exp, exp.channel)
          except Exception:
              return error_response(
                  error_text="Failed to subscribe to chat for channel on launch "
                  + "{}".format(exp.channel)
                  + ", check experiment server log for details",
                  status=500,
                  simple=True,
              )
  
      message = "\n".join(
          (
              "Initial recruitment list:\n{}".format(
                  "\n".join(recruitment_details["items"])
              ),
              "Additional details:\n{}".format(recruitment_details["message"]),
          )
      )
  
      return success_response(recruitment_msg=message)