我已准备好启动我的项目了.我有很大的计划在发布后,数据库结构将发生变化 - 现有表中的新列以及新表,以及与现有模型和新模型的新关联.
我还没有触及Sequelize中的迁移,因为我只有测试数据,我不介意每次数据库更改时擦除.
为此,目前我正在运行sync force: true应用程序启动时,如果我更改了模型定义.这会删除所有表并从头开始创建它们.我可以省略force让它只创建新表的选项.但如果现有的已经改变,这没有用.
所以,一旦我添加了迁移,事情是如何运作的?显然,我不希望现有的表(包含其中的数据)被消灭,因此sync force: true是不可能的.在我帮助开发的其他应用程序(Laravel和其他框架)作为应用程序部署过程的一部分,我们运行migrate命令来运行任何挂起的迁移.但是在这些应用程序中,第一次迁移有一个骨架数据库,数据库处于开发初期的状态 - 第一个alpha版本或其他任何版本.因此,通过按顺序运行所有迁移,即使是派对迟到的应用程序实例也可以一次性加快速度.
如何在Sequelize中生成这样的"第一次迁移"?如果我没有,那么应用程序的某个新实例将在没有框架数据库的情况下运行迁移,或者它将在开始时运行同步并将使数据库处于新状态新表等,但是当它尝试运行迁移时,它们将没有意义,因为它们是用原始数据库编写的,并且每次连续迭代都在考虑之中.
我的思考过程:在每个阶段,初始数据库加上每个顺序的迁移应该等于(加或减数据)sync force: true运行时生成的数据库.这是因为代码中的模型描述描述了数据库结构.因此,如果没有迁移表,我们只需运行同步并将所有迁移标记为已完成,即使它们未运行.这是我需要做的(怎么样?),或者Sequelize本身应该这样做,还是我咆哮着错误的树?如果我在正确的区域,肯定应该有一个很好的方法来自动生成大部分迁移,给定旧模型(通过提交哈希?甚至每次迁移都可以绑定到提交?我承认我在想在一个非便携式的以git为中心的宇宙中)和新模型.它可以区分结构并生成将数据库从旧变换到新变换所需的命令,然后开发人员可以进入并进行任何必要的调整(删除/转换特定数据等).
当我使用--init命令运行sequelize二进制文件时,它会给我一个空的迁移目录.当我运行sequelize --migrate它时,它使我成为SequelizeMeta表,其中没有任何内容,没有其他表.显然不是,因为二进制文件不知道如何引导我的应用程序并加载模型.
我肯定错过了什么.
TLDR:如何设置我的应用程序及其迁移,以便更新实时应用程序的各种实例,以及没有旧版启动数据库的全新应用程序?
我正在尝试通过JS更改视频源.这主要是有效的.
var basename = "video/whatever";
$("#myvideo")[0].setSrc([
{type: "video/mp4", src: basename + ".mp4"},
{type: "video/webm", src: basename + ".webm"},
{type: "video/ogg", src: basename + ".ogv"}
]);
Run Code Online (Sandbox Code Playgroud)
所以第一个问题:当我更改源时,暂停按钮显示而不是播放,并且即使暂停,也不会显示大的叠加播放按钮.我已经尝试在setSrc调用之前和之后发送stop()和pause()以及setCurrentTime(0)的各种组合,但没有运气.
更重要的问题:我还没有找到改变视频海报形象的方法.我期待在API中看到一个方法来更改它,因为我希望它也可以更新Flash/Silverlight后备.我尝试只更改视频元素上的poster属性,但似乎没有这样做.
我有一个带有Windows .exe依赖的Python脚本,它依赖于(闭源)Windows DLL.Python脚本通过调用Wine在Ubuntu中运行得很好.
是否可以(并且实际)在AWS Lambda上运行它?
准备代码包会涉及什么?
我试图在React Component中使用Google Map,但它似乎不起作用.我目前指的是https://developers.google.com/maps/documentation/javascript/adding-a-google-map
这是我的组件代码:
class ContactBody extends React.Component {
componentWillMount() {
const script = document.createElement("script");
const API = 'AIzaSyDbAz1XXxDoKSU2nZXec89rcHPxgkvVoiw';
script.src = `https://maps.googleapis.com/maps/api/js?key=${API}&callback=initMap`;
script.async = true;
document.body.appendChild(script);
};
initMap() {
const uluru = {lat: -25.363, lng: 131.044};
const map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: uluru
});
const marker = new google.maps.Marker({
position: uluru,
map: map
});
}
render() {
this.initMap();
return (
<div>
<h1>Contact</h1>
<div id="map" style={{width: 400, height: 300}}></div>
</div>
)
}
}
ReactDOM.render(
<ContactBody />,
document.getElementById('react') …Run Code Online (Sandbox Code Playgroud)自从过去两天以来,我面临一个相当混乱的问题.我正在开发一个文档管理系统,它使用从SOLR中提取数据的API.数据约为15Mbs,并提取超过4000个文档的记录.API有这种格式的响应 -
{
"documents": [
{
id: 123,
some_field: "abcd",
some_other_field: "abcdef"
},
{
id: 124,
some_field: "abcd1",
some_other_field: "abcdef1"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在浏览器中一切正常.如果我在Chrome或Firefox浏览器中点击端点,它会给我正确的输出,我能够看到JSON输出.
但是,如果我尝试使用Java或JS代码访问相同的API端点 - 响应代码为200,但控制台(终端或Eclipse)中\u0089 \u0078 U+0080的输出显示类似的unicode字符- 所有输出都以这种方式出现,并且因为有API提取了大约4000多条记录,控制台有点填充所有这些unicode字符.
我在浏览器和代码之间看到的唯一区别是,在浏览器中我可以看到Content-Encoding : gzip,而我无法从我编写的代码中找到此标头.例如 - 在JS代码中,通过Chakram框架,我可以检查
expect(response).to.be.encoded.with.gzip
这里提到的.但是,这会返回失败说明expected undefined to match gzip
我在这里错过了什么?这是与编码/解码有关的东西还是完全不同的东西?
编辑1:NetworkChrome标签中显示的响应标题:
cache-control: max-age=0, private, must-revalidate, max-age=315360000
content-encoding: gzip
content-type: application/json; charset=utf-8
date: Tue, 22 May 2018 06:07:26 GMT
etag: "a07eb7c1eef4ab97699afc8d61fb9c5d"
expires: Fri, 19 May 2028 06:07:26 GMT
p3p: …Run Code Online (Sandbox Code Playgroud) 我发现了一个影响Safari 6.1和7.0的错误(在Safari 5.1和6.0中没问题).我已经向Apple报告过了.
测试用例在这里:http://tremby.net/dump/iframe-safari/
代码很简单.父页面只有一个iframe,iframe有一个触发器,用于mousewheel触发警报的事件.iframe的内容小于iframe本身(稍后会详细介绍).
如果通过单击位置栏并按Enter来刷新此页面,则iframe中的鼠标滚轮事件将不会触发(您看不到警报).但是如果你用刷新按钮刷新它们会.
我需要的是一个解决方法.
我们已经发现的一个是让iframe的内容溢出iframe的边界.鼠标滚轮事件现在会触发,但滚动条和内容移动是不可接受的.(没关系为什么选择使用iframe - 这不取决于我.)
有任何想法吗?
我有一个元素已经转换为a matrix3d给它透视.它代表手持设备的屏幕.
有一个背景图像显示了手持设备本身,并没有转换.定位保持它的元件,并且屏幕元件绝对位于其中,在left: 0; top: 0;容器的左上方,然后变换,其中原点位于容器的左上方.这是我与背景图像完美排列的最简单方法(我使用这个非常方便的工具来提出矩阵),它将屏幕元素从角落移开.
我希望能够通过鼠标和触摸事件与屏幕进行交互.为此,在点击或触摸事件中,我需要找到屏幕元素的局部坐标系中的坐标 - 即变换发生前的坐标.换句话说,当点击手持设备屏幕的左上角(不是页面边界框的左上角!)时,我想要[0, 0],当点击屏幕的右上角时,在这个转换的情况下实际上是在页面上以及右边,我想要的[untransformedWidth, 0].
鼠标事件提供offsetX并offsetY据称正是这样做的(下面更多内容),但触摸事件没有这些属性,所以我需要一种方法来自己计算它们.
使用math.js我可以输入转换矩阵并将其反转.我有一些代码来循环CSS规则来获取transform: matrix3d(...)规则(如果我不需要,我不想在我的代码中重复它),我将跳过 - 我知道它有效,因为数字匹配CSS.
请注意,CSS的列矩阵元素按列顺序排列,因此请matrix3d(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)使用常规矩阵表示法,如下所示:
? ?
? a e i m ?
? b f j n ?
? c g k o ?
? d h l p …Run Code Online (Sandbox Code Playgroud) 我正在试验Typescript,根据我目前的合同,我使用PHP编写后端代码。
在几个项目中,我为后端代码提供的AJAX响应类型编写了Typescript接口,以便前端开发人员(有时也是我,有时是其他人)知道期望什么并进行类型检查等。
在编写了一些这样的后端服务之后,似乎响应的接口和相关类也应该存在于PHP端。这让我认为,最好只用两种语言之一编写它们并运行一些构建时工具(在Typescript编译器运行之前,我先用gulp任务调用它)来导出它们与其他语言的接口。
这样的事情存在吗?可能吗?实际的?
(我意识到PHP不是强类型的,但是如果接口是用PHP编写的,那么那里可能会有一些类型提示,例如文档字符串,导出器可以识别并继承到Typescript。)
my_form通过带有一组单选按钮的表单,name=my_radio我可以获得一个RadioNodeList带有 的对象my_form.elements.my_radio。我可以使用该对象的属性获取当前选定按钮的值value,如果我向该value属性分配一个字符串,则选定的选项会相应更改。
我期望能够my_form.elements.my_radio.addEventListener('change', ...监听值的变化(通过用户选择不同的选项),但它没有这样的方法。
如何检测值的变化?
是在每个单独的单选按钮对象上设置事件侦听器的唯一方法吗?
var my_form = document.querySelector('#my_form');
var my_radio = my_form.elements.my_radio;
// This fails since RadioNodeList has no addEventListener function
/*
my_radio.addEventListener('change', function () {
console.log("Value changed; new value is " + my_radio.value);
});
*/
// The following works, but is there a better way, such as with a single event listener?
for (var i = 0, l = my_radio.length; i < l; i++) …Run Code Online (Sandbox Code Playgroud)我有一个不可搜索的文件对象.特别是它是来自HTTP请求的不确定大小的文件.
import requests
fileobj = requests.get(url, stream=True)
Run Code Online (Sandbox Code Playgroud)
我正在将此文件传输到对Amazon AWS SDK功能的调用,该功能正在将内容写入Amazon S3.这工作正常.
import boto3
s3 = boto3.resource('s3')
s3.bucket('my-bucket').upload_fileobj(fileobj, 'target-file-name')
Run Code Online (Sandbox Code Playgroud)
但是,在将其流式传输到S3的同时,我还希望将数据流式传输到另一个进程.这个其他过程可能不需要整个流,可能会在某个时候停止收听; 这很好,不应该影响到S3的流.
重要的是我不要使用太多内存,因为其中一些文件可能非常庞大.出于同样的原因,我不想写任何东西到磁盘.
我不介意任何一个接收器由于另一个慢速而减速,只要S3最终得到整个文件,并且数据转到两个接收器(而不是每个接收器仍然需要它).
在Python(3)中最好的方法是什么?我知道我不能只将相同的文件对象传递给两个接收器,例如
s3.bucket('my-bucket').upload_fileobj(fileobj, 'target-file-name')
# At the same time somehow as
process = subprocess.Popen(['myapp'], stdin=fileobj)
Run Code Online (Sandbox Code Playgroud)
我想我可以为类似文件的对象编写一个包装器,它不仅将任何数据传递给调用者(也就是S3接收器),而且还传递给另一个进程.就像是
class MyFilewrapper(object):
def __init__(self, fileobj):
self._fileobj = fileobj
self._process = subprocess.Popen(['myapp'], stdin=popen.PIPE)
def read(self, size=-1):
data = self._fileobj.read(size)
self._process.stdin.write(data)
return data
filewrapper = MyFilewrapper(fileobj)
s3.bucket('my-bucket').upload_fileobj(filewrapper, 'target-file-name')
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?也许是这样的
streams = StreamDuplicator(fileobj, streams=2)
s3.bucket('my-bucket').upload_fileobj(streams[0], 'target-file-name')
# At the same time somehow as
process = subprocess.Popen(['myapp'], …Run Code Online (Sandbox Code Playgroud) javascript ×6
api ×1
aws-lambda ×1
database ×1
encoding ×1
google-maps ×1
html ×1
interface ×1
mathjs ×1
node.js ×1
php ×1
python ×1
python-3.x ×1
reactjs ×1
redux ×1
safari ×1
sequelize.js ×1
stream ×1
typescript ×1
wine ×1