小编Apo*_*llo的帖子

保持容器活着并使用docker-compose链接

我想用来docker-compose组合php和几个数据库(orientdb,neo4j等).然后进入php容器并使用shell执行命令.

单独地,我的所有容器都在游泳,当我把它们组合在一起时,它们都会运行.但是,我不能为我的生活弄清楚如何保持php容器活着,所以我可以进入它进行测试.

为简单起见,我只使用一个数据库:orient-db.

我的docker-compose.yml档案:

version: '2'
services:
  php:
    build: .
    links:
       - orientdb

  orientdb:
    image: orientdb:latest
    environment:
      ORIENTDB_ROOT_PASSWORD: rootpwd
    ports:
       - "2424:2424"
       - "2480:2480"
Run Code Online (Sandbox Code Playgroud)

我的"php" Dockerfile:

FROM php:5.6-cli
ADD . /spider
WORKDIR /spider
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
RUN composer install --prefer-source --no-interaction

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini
Run Code Online (Sandbox Code Playgroud)

我试过(除其他外):

  • docker-compose up在一个终端然后docker attach在另一个终端
  • 启用tty …

php provisioning orientdb docker docker-compose

10
推荐指数
4
解决办法
9842
查看次数

微服务架构 - 在订单无关紧要时通过服务传递消息

Tl;博士:"我如何通过一堆异步,无序的微服务推送消息,并知道该消息何时通过它们?"

我正在努力为特定的微服务架构找到合适的消息传递系统/协议.这不是"哪个是最好的"问题,而是关于我对设计模式/协议的选择的问题.

图

  • 我在开始队列中有一条消息.让我们说一个带有序列化JSON的RabbitMQ消息
  • 我需要该消息来通过任意数量的微服务
  • 这些微服务中的每一个都是长期运行的,必须是独立的,并且可以以各种语言实现
  • 消息所经过的服务顺序无关紧要.实际上,它不应该是同步的.
  • 每个服务都可以数据附加到原始消息,但其他服务会忽略该数据.应该没有合并冲突(每个服务写一个唯一的密钥).任何服务都不会改变或破坏数据.
  • 一旦所有服务轮到他们,就应该使用原始数据和新数据将消息发布到第二个RabbitMQ队列.
  • 微服务没有其他副作用.如果这些都在一个单片应用程序中(并且使用相同的语言),那么函数式编程将是完美的.

那么,问题是,通过各种服务管理该消息的适当方式是什么?我不想一次做一个,订单并不重要.但是,如果是这种情况,那么系统如何知道所有服务何时发生了重击并且最终消息可以写入结束队列(以使下一批服务完成它们).

我能想到的唯一,半优雅的解决方案是

  1. 让第一个遇到消息的服务将该消息写入公共存储(比如mongodb)
  2. 让每个服务做它的事情,标记它已完成该消息,然后检查所有服务是否已经轮到他们
  3. 如果是这样,那最后一个服务将发布该消息

但是,这仍然需要每个服务都知道所有其他服务,要求每个服务留下其标记.这些都不是必需的.

我对某种"牧羊人"服务持开放态度.

我很感激我错过的任何选择,并且愿意承认他们可能是一个更好的,基本的设计.

谢谢.

architecture design-patterns message-queue rabbitmq microservices

8
推荐指数
1
解决办法
1377
查看次数

在 Docker 内部运行时,GDBServer 未启动或侦听端口

我试图在 Docker 容器内编译一个“hello world”Rust 程序,然后使用 GDBServer 和 CLion 远程调试它,但我认为gdbserver启动不正确。当我启动它时,我没有收到我期望的“进程已启动”和“正在侦听端口...”消息;我什么也没得到。

我已经在家庭网络上使用 Raspberry Pi 成功完成了此操作,但在使用 Docker 时无法使其工作。

我的最终目标是在 Digital Ocean Droplet 上部署此 Docker 容器,并从本地计算机进行远程调试。目前,我已在本地计算机上运行 Docker。

我正在 Mac (Mojave) 上工作,运行 Docker (v18.09),并启动一个 Docker 容器,该容器是使用 Rust 构建的 Debian 镜像并gdbserver安装了. GDBServer 和 Rust 通过以下方式安装:

# install curl (needed to install rust)
apt-get update && apt-get install -y curl gdb g++-multilib lib32stdc++6 libssl-dev libncurses5-dev

# install rust + cargo nightly
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly …
Run Code Online (Sandbox Code Playgroud)

debugging gdbserver rust docker clion

6
推荐指数
1
解决办法
4900
查看次数

在同一域上的 php 和 python 之间共享身份验证

我正处于新项目/站点的早期规划阶段。该应用程序的三分之二已经用 php/laravel 编写。新部分将用 python 编写,最有可能使用 Flask 或 Cherrypy(我需要 Nosql 访问权限,因此 Django 已出局)。

Laravel 应用程序是主站点,管理用户注册、身份验证、活动流和通知,以及通用 REST Api。网站的这一部分已经在开发中,所以切换到 python 不是一个选择。

这两个部分都需要让最终用户感觉完全统一。设计和主题将是相同的。即使是网址也不会显示出任何区别:

site.com - laravel

site.com/forums - laravel

site.com/login,logout,signup - laravel

site.com/ - laravel

site.com/maker - python/flask

我想我已经想出了如何从同一台服务器上同时提供服务,但是如何共享登录信息?用户应该能够使用 laravel 登录并导航到 /maker 并且仍然处于登录状态。

要记住:

  • maker 不会注册用户,只需要确保他们已经登录。如果没有,重定向到 Laravel 的登录页面。
  • 此外,两者都可以访问同一个数据库。

我在这里有哪些选择?

php python authentication session laravel

5
推荐指数
0
解决办法
1314
查看次数

Node.js无法在Windows上安装全局npm包(不是路径)

所以,我有一个奇怪的问题,我甚至不确定我能识别出来.我刚刚在Windows 7机器上安装了当前版本的Node.js(v.10.*).我试图在全局安装一些软件包(gulp和yoeman),但是在安装时遇到错误,在我的C:\ Users\Michael\AppData\Roaming \npm \node_modules目录中,许多软件包文件都丢失了.显然,当我尝试全局运行命令时,它会因为没有命令而失败.它从未被创造过.

其他一些全球安装的包工作正常(bower和grunt).

让事情变得非常棘手.当我将gulp安装到本地文件夹(没有-g)时,安装工作正常,我可以通过在命令之前添加整个路径来使用gulp.显然,我可以将该路径添加到我的系统属性中,因此该命令将是全局的,但这并不能解决我的问题.为什么在全局安装时安装会产生错误,而在本地安装时则不会?

当我在本地安装gulp时观察目录,我看到正在创建的文件.然后出现第一个错误,删除了许多文件.

我相信我的gulp安装日志的相关部分是:

6949 verbose lock lodash.noop@2.4.1 C:\Users\Michael\AppData\Roaming\npm-cache\7e62c2bb-lodash-noop-2-4-1.lock
6950 error Error: ENOENT, lstat 'C:\Users\Michael\AppData\Roaming\npm\node_modules\gulp\node_modules\vinyl-fs\node_modules\glob-stream\node_modules\glob2base\node_modules\lodash.findindex\node_modules\lodash.createcallback\node_modules\lodash._baseisequal\node_modules\lodash._releasearray\node_modules\lodash._arraypool'
6951 error If you need help, you may report this *entire* log,
6951 error including the npm and node versions, at:
6951 error     <http://github.com/npm/npm/issues>
6952 error System Windows_NT 6.1.7601
6953 error command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "gulp"
6954 error cwd c:\wamp\www\phoenix\animus\gulp
6955 error node -v v0.10.28
6956 error npm -v 1.4.9
6957 error path C:\Users\Michael\AppData\Roaming\npm\node_modules\gulp\node_modules\vinyl-fs\node_modules\glob-stream\node_modules\glob2base\node_modules\lodash.findindex\node_modules\lodash.createcallback\node_modules\lodash._baseisequal\node_modules\lodash._releasearray\node_modules\lodash._arraypool
6958 error fstream_path …
Run Code Online (Sandbox Code Playgroud)

windows node.js npm

3
推荐指数
1
解决办法
3983
查看次数

在orientdb中sql批处理和事务有什么区别?

我已经阅读了文档,似乎SQL BATCH命令和事务完成了相同的目的,即将所有语句作为全有或全无的事务提交.

这是正确的,还是我错过了什么?

我通过PhpOrient语言绑定使用Orient,并看到它支持事务和批处理,但我只使用SQL并且只想使用SQL执行事务.从我的测试来看似乎是一样的,但我想确认一下.

sql t-sql transactions orientdb

3
推荐指数
1
解决办法
5005
查看次数