小编har*_*ren的帖子

我如何知道我的docker mysql容器何时启动并且mysql已准备好接受查询?

我正在部署一些不同的docker容器,mysql是第一个.我想在数据库启动后立即运行脚本并继续构建其他容器.该脚本一直在失败,因为当设置mysql(来自这个官方的mysql容器)的入口点脚本仍在运行时,它试图运行.

sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=MY_ROOT_PASS -p 3306:3306 -d mysql
[..] wait for mysql to be ready [..]
mysql -h 127.0.0.1 -P 3306 -u root --password=MY_ROOT_PASS < MY_SQL_SCRIPT.sql
Run Code Online (Sandbox Code Playgroud)

有没有办法等待在docker容器内完成入门的mysql安装脚本的信号?Bash睡眠似乎是次优解决方案.

编辑:去找这样的bash脚本.不是最优雅和善良的蛮力,但工作就像一个魅力.也许有人会觉得有用.

OUTPUT="Can't connect"
while [[ $OUTPUT == *"Can't connect"* ]]
do
    OUTPUT=$(mysql -h $APP_IP -P :$APP_PORT -u yyy --password=xxx <       ./my_script.sql 2>&1)
done
Run Code Online (Sandbox Code Playgroud)

mysql bash shell docker

53
推荐指数
9
解决办法
4万
查看次数

为异步龙卷风Web套接字服务器编写同步测试套件

我正在尝试为我的龙卷风Web套接字服务器设计一个测试套件.

我正在使用客户端执行此操作 - 通过websocket连接到服务器,发送请求并期望得到某个响应.

我使用python的unittest来运行我的测试,所以我不能(并且不想真正)强制执行测试的顺序.

这就是我的基础测试类(在所有测试用例继承之后)的组织方式.(记录和某些不相关的部分被剥离).

class BaseTest(tornado.testing.AsyncTestCase):
    ws_delay = .05

    @classmethod
    def setUpClass(cls):
        cls.setup_connection()
        return

    @classmethod
    def setup_connection(cls):
            # start websocket threads
            t1 = threading.Thread(target=cls.start_web_socket_handler)
            t1.start()

            # websocket opening delay
            time.sleep(cls.ws_delay)

            # this method initiates the tornado.ioloop, sets up the connection
            cls.websocket.connect('localhost', 3333)

        return

    @classmethod
    def start_web_socket_handler(cls):
            # starts tornado.websocket.WebSocketHandler
            cls.websocket = WebSocketHandler()
            cls.websocket.start()
Run Code Online (Sandbox Code Playgroud)

我想出的方案是让这个基类在所有测试中连接一次(虽然不一定是这种情况) - 我很乐意设置并拆除每个测试用例的连接,如果它解决了我的问题问题).重要的是我不希望同时打开多个连接.

简单的测试用例就是这样.

class ATest(BaseTest):
    @classmethod
    def setUpClass(cls):
        super(ATest, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(ATest, cls).tearDownClass()

    def test_a(self):
        saved_stdout = sys.stdout
        try:
            out = StringIO() …
Run Code Online (Sandbox Code Playgroud)

python asynchronous tornado websocket python-unittest

5
推荐指数
1
解决办法
2105
查看次数