小编Dre*_*een的帖子

在docker中部署最小烧瓶应用程序 - 服务器连接问题

我有一个应用程序谁只有依赖是烧瓶,它在docker外运行良好并绑定到默认端口5000.这是完整的来源:

from flask import Flask

app = Flask(__name__)
app.debug = True

@app.route('/')
def main():
    return 'hi'

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

问题是,当我在docker中部署它时,服务器正在运行但无法从容器外部访问.

下面是我的Dockerfile.图像是安装了烧瓶的ubuntu.tar只包含index.py上面列出的内容;

# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv

# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz

# Run server
EXPOSE 5000
CMD ["python", "index.py"]
Run Code Online (Sandbox Code Playgroud)

以下是我要部署的步骤

$> sudo docker build -t perfektimprezy .

据我所知,上面运行正常,图像中有tar的内容/srv.现在,让我们在一个容器中启动服务器:

$> sudo docker run -i -p 5000:5000 -d …
Run Code Online (Sandbox Code Playgroud)

python deployment flask docker dockerfile

83
推荐指数
6
解决办法
2万
查看次数

在docker中重定向命令输出

我想为我的服务器做一些简单的日志记录,这是一个在Docker容器中运行的小型Flask应用程序.

这是Dockerfile

# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv

# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz

# Run server
EXPOSE 80
CMD ["python", "index.py", "1>server.log", "2>server.log"]
Run Code Online (Sandbox Code Playgroud)

正如您在最后一行所看到的,我将stderr和stdout重定向到一个文件.现在我运行这个容器和shell

docker run -d -p 80:80 perfektimprezy
docker exec -it "... id of container ..." bash
Run Code Online (Sandbox Code Playgroud)

并观察以下事项:

服务器正在运行,网站正常运行

没有 /srv/server.log

ps aux | grep python 收益率:

root         1  1.6  3.2  54172 16240 ?        Ss   13:43   0:00 python index.py 1>server.log 2>server.log
root        12 …
Run Code Online (Sandbox Code Playgroud)

linux bash logging output docker

45
推荐指数
3
解决办法
6万
查看次数

使用JavaFX的WebEngine/WebView设置cookie

我似乎找不到任何方法在JavaFX中使用WebEngine/WebView以编程方式设置cookie .API没有给出任何关于如何获得类似HttpRequest的对象来修改标题(这是我在XML-RPC中使用的应用程序)或任何类型的cookie管理器的想法.

这个页面上的任何问题似乎都没有触及这个问题 - 有这个,但它只是在applet中修复bug时禁用cookie ,我的应用程序在桌面上btw.

我想象的唯一方法是通过请求第一页(需要带有sessionID的cookie才能正确加载),获取"拒绝访问"风格的消息,在页面上下文中执行一些javascript来设置cookie和然后刷新.这个解决方案虽然是一个糟糕的用户体验.

如何使用WebEngine设置cookie?


更新:从上面链接的问题中找到线索,我尝试了解使用CookieManager和相关API的一些示例.我找到了这个代码,然后我尝试将其合并到我的应用程序中,结果很奇怪;

MyCookieStore cookie_store = new MyCookieStore();
CookieManager cookie_manager = new CookieManager(cookie_store, new MyCookiePolicy());
CookieHandler.setDefault(cookie_manager);
WebView wv = new WebView();
Run Code Online (Sandbox Code Playgroud)

现在让我们说这样做:

String url = "http://www.google.com/";
wv.getEngine.go(url);
Run Code Online (Sandbox Code Playgroud)

在发出此请求后在Eclipse中进行调试显示cookie存储映射包含cookie:

{http://www.google.com/=[NID=67=XWOQNK5VeRGEIEovNQhKsQZ5-laDaFXkzHci_uEI_UrFFkq_1d6kC-4Xg7SLSB8ZZVDjTUqJC_ot8vaVfX4ZllJ2SHEYaPnXmbq8NZVotgoQ372eU8NCIa_7X7uGl8GS, PREF=ID=6505d5000db18c8c:FF=0:TM=1358526181:LM=1358526181:S=Nzb5yzBzXiKPLk48]}
Run Code Online (Sandbox Code Playgroud)

太棒了

WebEngine只使用底层注册的cookie引擎!但等等,真的吗?让我们在发出请求之前尝试添加cookie ...

cookie_store.add(new URL(url).toURI(), new HttpCookie("testCookieKey", "testCookieValue"));
Run Code Online (Sandbox Code Playgroud)

然后我看看Wireshark中的请求......

GET / HTTP/1.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/535.14 (KHTML, like Gecko) JavaFX/2.2 Safari/535.14 …
Run Code Online (Sandbox Code Playgroud)

cookies javafx httprequest http-headers javafx-2

42
推荐指数
1
解决办法
2万
查看次数

使用jackson在json中发送一个字节数组

我想形成一个带有两个字段mimetype和value的JSON.值字段应该以字节数组作为其值.

{

  "mimetype":"text/plain",

  "value":"dasdsaAssadsadasd212sadasd"//this value is of type byte[]

}
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成这项任务?

截至目前,我正在使用toString()方法将字节数组转换为String并形成JSON.

json jackson

23
推荐指数
3
解决办法
6万
查看次数

将System.out重定向到JavaFX中的TextArea

更新:

仍然有相同的问题,主要应用程序代码的修订源:http: //pastebin.com/fLCwuMVq

必须有一些东西CoreTest阻止UI,但它做各种各样的东西(异步xmlrpc请求,异步http请求,文件io等),我尝试把它全部插入,runLater但它没有帮助.

更新2:

我验证了代码运行并正确生成输出,但UI组件无法管理显示它多年

更新3:

好的我修好了.我不知道为什么,但没有关于JavaFX的指导说明这一点,而且非常重要:

始终将程序逻辑放在与Java FX线程不同的线程中


我有这个使用Swing的,JTextArea但由于某种原因它不适用于JavaFX.

我尝试调试它并.getText()在每次写入后执行返回正确写入的字符,但TextAreaGUI中的实际显示没有文本.

我忘了以某种方式刷新它或什么?

TextArea ta = TextAreaBuilder.create()
    .prefWidth(800)
    .prefHeight(600)
    .wrapText(true)
    .build();

Console console = new Console(ta);
PrintStream ps = new PrintStream(console, true);
System.setOut(ps);
System.setErr(ps);

Scene app = new Scene(ta);
primaryStage.setScene(app);
primaryStage.show();
Run Code Online (Sandbox Code Playgroud)

Console班级:

import java.io.IOException;
import java.io.OutputStream;

import javafx.scene.control.TextArea;

public class Console extends OutputStream
{
    private TextArea    output;

    public Console(TextArea ta)
    {
        this.output = ta;
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

java textarea javafx io-redirection printstream

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

JavaFX在WebView中停止打开URL - 而不是在浏览器中打开

我使用的嵌入式WebView浏览器需要对特定URL进行特殊处理,以在本机默认浏览器而不是WebView中打开它们.实际的浏览部分工作正常但我需要阻止WebView显示该页面.我可以想到几种方法,但没有一种方法可行.这是我的代码:

this.wv.getEngine().locationProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
    {
        Desktop d = Desktop.getDesktop();
        try
        {
            URI address = new URI(observable.getValue());
            if ((address.getQuery() + "").indexOf("_openmodal=true") > -1)
            {
                // wv.getEngine().load(oldValue); // 1
                // wv.getEngine().getLoadWorker().cancel(); // 2
                // wv.getEngine().executeScript("history.back()"); // 3
                d.browse(address);
            }
        }
        catch (IOException | URISyntaxException e)
        {
            displayError(e);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

关于三种情况中每种情况会发生什么的更多信息

1.加载以前的地址

wv.getEngine().load(oldValue);
Run Code Online (Sandbox Code Playgroud)

这会杀死JVM.有趣的是,该页面在本机浏览器中打开正常.

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at …
Run Code Online (Sandbox Code Playgroud)

java jvm javafx webview javafx-2

12
推荐指数
3
解决办法
2万
查看次数

保持WebSocket连接活动

我正在研究WebSocket协议,并尝试在后端使用Python实现一个简单的ECHO服务.它似乎工作正常但连接在建立后立即下降.

这是我的客户:

<!doctype html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function Client()
{
    //var ws = new WebSocket("ws://echo.websocket.org"); // this works fine
    var ws = new WebSocket("ws://localhost:8000");
    ws.onopen = function(e){ $("#response").append(">> Connected<br />"); }
    ws.onclose = function(e){ $("#response").append(">> Disconnected<br />"); }
    ws.onerror = function(e){ $("#response").append(">> ERROR: " + e.data + "<br />"); }
    ws.onmessage = function(e){ $("#response").append("> " + e.data + "<br />"); }

    this.sendCmd = function()
    {
        var message = $("#cmd").val();
        $("#response").append(message + "<br />");
        ws.send(message);
        return false;
    } …
Run Code Online (Sandbox Code Playgroud)

javascript python sockets websocket http-headers

11
推荐指数
1
解决办法
1万
查看次数

Python:将复杂的字符串字典从Unicode转换为ASCII

可能重复:
如何在Python中从JSON获取字符串对象而不是Unicode?

作为从JSON API调用解析的多级字典,我有很多输入.字符串都是unicode,这意味着有很多u'stuff like this'.我正在使用jq来处理结果,需要将这些结果转换为ASCII.

我知道我可以编写一个函数来像这样转换它:

def convert(input):
    if isinstance(input, dict):
        ret = {}
        for stuff in input:
            ret = convert(stuff)
    elif isinstance(input, list):
        ret = []
        for i in range(len(input))
            ret = convert(input[i])
    elif isinstance(input, str):
        ret = input.encode('ascii')
    elif :
        ret = input
    return ret
Run Code Online (Sandbox Code Playgroud)

这甚至是正确的吗?不确定.这不是我想问你的.

我要问的是,这是解决问题的典型蛮力解决方案.肯定有更好的办法.一种更加pythonic的方式.我不是算法专家,但这个也不是特别快.

那么还有更好的方法吗?或者如果没有,可以改进这个功能......?


回答后编辑

Mark Amery的回答是正确的,但我想发布它的修改版本.他的函数适用于Python 2.7+而我在2.6上,所以不得不转换它:

def convert(input):
    if isinstance(input, dict):
        return dict((convert(key), convert(value)) for key, value in input.iteritems())
    elif isinstance(input, list):
        return [convert(element) for element …
Run Code Online (Sandbox Code Playgroud)

python algorithm unicode json ascii

10
推荐指数
1
解决办法
2万
查看次数

使用哪个Java XML RPC库

在普通的使用似乎有两种选择:

  • javax.xml.rpc - 似乎更复杂但是是标准jdk的一部分(或者是它?)
  • org.apache.xmlrpc - 似乎更容易使用,但我必须在我的jar中附加库(或者我?)

我应该将哪一个用于dektop Java应用程序?或者也许还有另一个真的很好,我不知道它存在吗?

java xml rpc xml-rpc

9
推荐指数
1
解决办法
8360
查看次数

session.gc_maxlifetime何时开始计数

在每个页面加载我运行session_start()以恢复当前会话.什么时候session.gc_maxlifetime开始计数?第一次session_start()被调用并且会话的cookie被设置了?或者计时器是否每次重启session_start()

随着session.gc_maxlifetime一套约24分钟的时候,在这个时间表的会话数据应该被垃圾收集

 1. 12:00:00 First page load, session_start(), session cookie created
 2. 12:10:00 page load, session_start() 
 3. 12:26:00 page load, session_start()
 4. 12:55:00 page load, session_start()
Run Code Online (Sandbox Code Playgroud)

如果计时器在第一页加载时启动,session_start()那么我预计它将在加载3上进行垃圾收集.但如果它每次都重置session_start(),那么它将在加载4之前收集.

我希望它是后者,因为那时我可以每隔几分钟做一次javascript心跳来调用运行的页面session_start().

如果它是前者,session.gc_maxlifetime从创建会话cookie开始计数我需要销毁/重新创建或重新生成_id来重置计数?

php session

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