小编Mus*_*abe的帖子

禁用JavaScript文件的nginx缓存

好吧,我几乎放弃了这个,但是如何禁用Nginx对JavaScript文件的缓存?我正在使用Nginx的docker容器.当我现在改变JavaScript文件中的内容时,我需要多次重新加载,直到新文件存在.

我怎么知道它是Nginx而不是浏览器/码头工具?

浏览器:我curl在命令行上使用模拟请求并遇到了同样的问题.此外,我正在使用CacheKiller插件并在Chrome开发工具中禁用缓存.

Docker:当我连接到容器的bash,并cat在更改文件后使用时,我立即得到正确的结果.

我改变了我nginx.confsites-enabled这个(我在另一个线程计算器中)

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ {
    # clear all access_log directives for the current level
    access_log off;
    add_header Cache-Control no-cache;
    # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years
    expires 1s;
}
Run Code Online (Sandbox Code Playgroud)

但是,在重建容器(并确保它在容器中cat)后,它仍然无法正常工作.这是完整的.conf

server {
    server_name app;
    root /var/www/app/web;

    # Redirect to blog
    location ~* ^/blog {
        proxy_set_header Accept-Encoding "";
        sub_filter 'https://testproject.wordpress.com/' '/blog/';
        sub_filter_once off; …
Run Code Online (Sandbox Code Playgroud)

javascript caching nginx

31
推荐指数
4
解决办法
7万
查看次数

使用vagrant和宅基地为多个站点和每个项目安装

我一直在使用XAMPP很长一段时间,在发现Laravel并发现之后,我非常喜欢它,我也想使用Homestead.我遇到的问题是,我似乎无法运行多个站点.

我尝试了各种各样的东西,但目前的主要问题是,一个项目有效,而其他所有项目在尝试访问其网页时都会出现连接超时.

这些是我使用Homestead的步骤

  1. 安装VirtualBox
  2. 安装Vagrant
  3. 添加宅基地 vagrant box add laravel/homestead
  4. 克隆存储库 git clone https://github.com/laravel/homestead.git Homestead
  5. Homestead使用bash init.sh脚本在目录中创建Homestead.yaml文件
  6. 创建一个新项目 laravel new projectA
  7. 要求宅基地 composer require laravel/homestead
  8. 生成Vagrantfile php vendor/bin/homestead make
  9. 修改Homestead.yaml以使其以10结尾的IP
  10. 创建另一个项目 laravel new projectB
  11. 要求宅基地 composer require laravel/homestead
  12. 生成Vagrantfile php vendor/bin/homestead make
  13. 修改Homestead.yaml以获得以11结尾的IP
  14. 将这两个站点添加到hosts文件sudo nano /etc/hosts=> xxx.xx.xx.10 projecta.app&xxx.xx.xx.11 projectb.app
  15. 从两个目录中的一个启动vagrant vagrant up

现在,我遇到了问题,只有一个项目可以访问.它始终是我打电话的地方vagrant up.因此,如果我vagrant up从Project AI 调用可以访问http://projecta.apphttp://projectb.app超时.可悲的是,相反的方式.

这是我的 vagrant global-status

id       name    provider   state   directory …
Run Code Online (Sandbox Code Playgroud)

php vagrant laravel homestead

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

条件表达式中的语法错误:意外标记`;'

我有一个shell脚本,应该接受多个参数.

它可以接受参数"update"或"create".如果没有传递参数,则用户应该收到错误.但是,在构建我的if/elif条件时,我收到错误:

syntax error in conditional expression: unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

代码:

firstParam=$1
echo $firstParam //update/create/{empty}

if [[ "$firstParam" == "" ]]; then
    printf "${RED}Use this script as \"tzfrs update/new [projectName]\"${NC} \n"
    exit 1
elif [[ "$firstParam" == "update"]]; then
  printf "update"
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

如果我有这样的脚本

if [[ "$firstParam" == "" ]]; then
    printf "${RED}Use this script as \"tzfrs update/new [projectName]\"${NC} \n"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

错误处理工作,我看到以下消息

Use this script as "tzfrs update/new [projectName]"

但是,添加elif条件时我得到了上述错误.有人有什么想法?

bash shell if-statement

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

PHP-FPM在执行繁重工作时拥有太多用户时崩溃

我有一台服务器运行Apache/2.2.22(Debian),PHP 5.6.17作为FPM和MySQL 5.6.25.

该项目使用名为Redaxo的CMS运行(我认为它不重要,但无论如何我会告诉你).在Redaxo中有一些功能需要一些时间(例如删除缓存并重建它需要1-2分钟).在这个时候,当其他用户进入网站时,FPM与a崩溃,500 Internal Server Error我必须多次重新加载页面,直到服务器错误消失并且过程完成.

我注意到只有当同一时间有太多用户在网站上并且只有在繁重的操作完成时才会发生这种情况.

10个用户同时只是冲浪=没问题
10个用户同时只是冲浪,而缓存删除= 500个错误.

我通过禁止除了我以外的所有人的网站检查了这个(.htaccess deny/allow with ip).然后我做了沉重的操作,没有问题.一旦多人再次访问该网站,问题就出现了.

会是什么呢?你需要我什么信息?

这些值在中设置(未注释) php-fpm.conf

[global]
pid = /run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
emergency_restart_threshold = 0
include=/etc/php5/fpm/pool.d/*.conf
Run Code Online (Sandbox Code Playgroud)

这些值在项目特定中设置(未注释) fpm.conf

[projectname]
user = projectname
group = projectname

listen = /var/run/php5-fpm-projectname.sock
listen.owner = projectname
listen.group = projectname
listen.mode = 0660

pm = dynamic
pm.max_children = 150
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

chdir = /

php_value[upload_max_filesize] = 128M
php_value[max_post_size] = 128M
php_value[max_execution_time] = 180
php_value[memory_limit] …
Run Code Online (Sandbox Code Playgroud)

php mysql apache

21
推荐指数
1
解决办法
5722
查看次数

我应该怎么写三个点?

简单的问题:我想设置一个TextView,我希望有三个点(省略号).喜欢

Read more...< - 现在我确定我不应该只写入...字符串.我应该怎么写这三个点?

java ellipsis

16
推荐指数
2
解决办法
7401
查看次数

区分按下的后退按钮和使用History API按下的前进按钮

我正在使用历史API将新URL推送到网页而不重新加载它.我有多个按钮,都有不同的功能.

我的脚本现在几乎没有问题.当我按下按钮时会发生一些事情,当我返回时,脚本会触发事件监听器而不重新加载页面.

但是,当我现在按下前进按钮时,我想继续前进.URL已正确更改为下一个,但事件侦听器仍然会像按下后退按钮一样触发

例:

  1. index1.html
  2. 按钮→ index2.html
  3. 按钮→ index3.html
  4. 按下后退按钮→ index2.html
  5. 按下前进按钮→现在是URL index3.html,但内容是index1.html

我想这是因为我有一个监听器,它会监听popstate后退按钮和按下前进按钮的情况.如何区分按下哪种按钮?

这是绑定侦听器的部分:

if (window.history && window.history.pushState) {
    $(window).unbind('popstate');
    $(window).bind('popstate', function (e) {
        clearOverlays();
        var url = URL
        $.ajax ( {
            url : url
        }).done ( function ( data ) {
            console.log(data);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

html javascript html5 browser-history html5-history

15
推荐指数
1
解决办法
2699
查看次数

Eloquent模型不更新updated_at时间戳

我正在使用Laravel 5.1.为简单起见,我有以下代码

移民:

Schema::create('sitemap_data', function (Blueprint $table) {
    // Primary and foreign keys
    $table->increments('id');
    $table->string('postUrl');
    // Database functions
    $table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的其他地方的代码

$sitemapData = SitemapData::firstOrNew([
                'postUrl' => $post
            ]);
$sitemapData->save();
Run Code Online (Sandbox Code Playgroud)

现在,根据Laravel文档

同样,updated_at时间戳将自动更新,因此无需手动设置其值

应在表中更新updated_at值.但是,这种情况并没有发生.

它只在第一次插入时设置,但不在更新时设置.当我手动完成时,就像这样

$sitemapData = SitemapData::firstOrNew([
                    'postUrl' => $post
                ]);
$sitemapData->updated_at = Carbon::now();
$sitemapData->save();
Run Code Online (Sandbox Code Playgroud)

有用.但是,文档说这应该自动发生,所以这里有什么问题?

我在stackoverflow上搜索了一些关于这个问题的网站,但是我发现了Laravel 3或4.1,4.2等的网站.

我该怎么做呢?

php timestamp laravel eloquent

15
推荐指数
4
解决办法
2万
查看次数

MySQL中的回归分析


在我的项目中介绍我正在保存FacebookPages及其类似数量,以及每个国家/地区的类似数量.我有一个FacebookPages表,一个用于语言,一个用于facebook页面和语言之间的关联(并计算喜欢的)和一个表将这些数据保存为历史记录.我想要做的是在特定时间段内获得最强烈增加的页面.

要使用的数据

我正在从创建查询中剥离不相关的信息.

包含所有Facebook页面的表

CREATE TABLE `pages` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `facebook_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `facebook_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `facebook_likes` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

示例数据:

INSERT INTO `facebook_pages` (`id`, `facebook_id`, `facebook_name`, `facebook_likes`)
VALUES
    (1, '552825254796051', 'Mesut Özil', 28593755),
    (2, '134904013188254', 'Borussia Dortmund', 13213354),
    (3, '310111039010406', 'Marco Reus', 12799627);
Run Code Online (Sandbox Code Playgroud)

包含所有语言的表

CREATE TABLE `languages` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `language` varchar(5) COLLATE utf8_unicode_ci NOT …
Run Code Online (Sandbox Code Playgroud)

mysql sql database regression

12
推荐指数
1
解决办法
4322
查看次数

Chrome会忽略ETag标头,只使用内存缓存/磁盘缓存

如果我理解正确,使用ETags的流程就像现在描述的那样:

  • 浏览器将请求发送到服务器.服务器使用ETag发回图像
  • 浏览器将资源与ETag一起保存
  • 在下一个请求中,浏览器使用If-None-Match包含已保存ETag 的标头发送请求.

返回响应时,chrome dev工具告诉我这些是我的标题

Cache-Control:max-age=7200
Connection:keep-alive
Content-Type:image/png
Date:Thu, 27 Apr 2017 13:42:57 GMT
ETag:"b36f59c868d4678033d318a182658e18371df8f5"
Expires:Thu, 27 Apr 2017 15:42:57 GMT
Server:nginx
Transfer-Encoding:chunked
X-Debug-Token:873c8f
X-Debug-Token-Link:http://localhost:8081/_profiler/873c8f
Run Code Online (Sandbox Code Playgroud)

现在,当我重新加载页面时,不会收集新图像.它可以通过Chrome的内存缓存或磁盘缓存保存,如您所见

Chrome开发标签

但为什么会这样呢?我发送了一个ETag,为什么浏览器不向服务器发出另一个请求,而是使用它自己的缓存?

我问的原因是,我们想要缓存我们的图像,但是一旦它们发生变化,它们应该立即更新.为什么Chrome会这样做?

更新
我刚注意到它在Firefox上很有用,所以这似乎是一个chrome"功能"而不是配置.

更新2
为此图像设置我的新标题后

Cache-Control:max-age=0, private
Connection:keep-alive
Content-Type:image/png
Date:Thu, 27 Apr 2017 14:44:57 GMT
ETag:"e5b18bdebe44ed4bba3acb6584d9e6a81692ee27"
Expires:Fri, 27 Oct 2017 14:44:57 GMT
Server:nginx
Transfer-Encoding:chunked
X-Debug-Token:3447a6
X-Debug-Token-Link:http://localhost:8081/_profiler/3447a6
Run Code Online (Sandbox Code Playgroud)

Chrome仍然使用磁盘缓存来处理数据.这是我的nginx吧

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
  access_log off;
  add_header Cache-Control "max-age: 0, must-revalidate";
}
Run Code Online (Sandbox Code Playgroud)

更新3
我刚做了一些进一步的研究.设置Expires标记后,Chrome会立即使用内存或磁盘缓存.与...相同max-age.我不明白,即使must-revalidate设置,只要Expiresmax-age=>0设置,Chrome不重新加载的ressource.

google-chrome http nginx server

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

编译带有浏览器导入的 TypeScript 文件

我的项目中有一个.ts使用导入的文件。当然,这些导入在浏览器中不起作用,因此我想编译我的打字稿文件以使其在浏览器中受支持

{
  "compilerOptions": {
    "noImplicitAny": true,
    "lib": ["es2017", "es7", "es6", "dom"],
    "module": "CommonJS",
    "target": "es5"
  },
  "files": [
    "test.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

只是为了测试,我添加了test.ts. 其内容是

import Axios from "axios";

var axios = Axios.create();
axios.get("https://www.example.com");
Run Code Online (Sandbox Code Playgroud)

现在,当我运行构建过程时,这就是结果

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var axios_1 = require("axios");
var axios = axios_1.default.create();
axios.get("https://www.example.com");
Run Code Online (Sandbox Code Playgroud)

当我在我的中使用它时index.html

<script src="test.js"></script>

它只是说ReferenceError: exports is not defined


我无法想象使用与浏览器兼容的 JavaScript 的导入来编译 TypeScript 会如此困难。任何帮助将不胜感激。

javascript typescript ecmascript-6

7
推荐指数
1
解决办法
752
查看次数