我有一个node.js脚本需要在启动时启动并在www-data用户下运行.在开发过程中,我始终使用以下命
su www-data -c 'node /var/www/php-jobs/manager.js
Run Code Online (Sandbox Code Playgroud)
我看到发生了什么,manager.js现在很棒.搜索我发现我必须把它放在我的/etc/rc.local.另外,我学会了点的输出到一个日志文件,并追加2>&1到"重定向错误输出到标准输出",它应该是一个守护进程,最后一个字符是一个&.
最后,我/etc/rc.local看起来像这样:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su www-data …Run Code Online (Sandbox Code Playgroud) 通常,转换方法采用键>值映射并使用键将其转换为值.现在我认识到两种不同的方法来命名您的翻译密钥,在我的团队中,我们没有达成共识,这似乎是最好的方法.
方法1: 使用完整的英语单词或句子:
Name => Name
Please enter your email address => Please enter your email address
Run Code Online (Sandbox Code Playgroud)
方法2: 使用描述情况的关键字:
NAME => Name
ENTER_EMAIL => Please enter your email address
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢方法#1,因为它直接显示了消息的含义.如果翻译不存在,您可以回到密钥,这不会导致任何问题.但是,当翻译频繁更改时,该方法很麻烦,因为需要更新所有文件.此外,对于较长的文本,这些键变得非常大.这可以通过使用类似的键来解决ENTER_EMAIL,但是语法完全不在上下文中.抽象翻译密钥列表将是巨大的,您需要元数据来解释其使用的所有密钥,并且可以更容易地发生冲突.
两种世界或第三种方法都是最好的吗?如何在应用程序中使用翻译键?在我们的例子中,它是一个基于PHP的Web应用程序,但我认为上面的问题是通用的足以谈论i18n一般.
我想使用Zend Framework 2控制器在php中为beanstalkd编写一个worker .它通过CLI启动并将永久运行,从此示例中请求来自beanstalkd的作业.
在简单的伪类代码中:
while (true) {
$data = $beanstalk->reserve();
$class = $data->class;
$params = $data->params;
$job = new $class($params);
$job();
}
Run Code Online (Sandbox Code Playgroud)
在$job这里有一个__invoke()过程的方法.但是,这些工作中的某些事情可能会持续很长时间.有些可能会运行相当大的内存.有些人可能注入了$beanstalk对象,自己开始新的工作,或者有一个Zend\Di\Locator实例从DIC中提取对象.
我很担心这种设置对于在长期的生产环境,为可能的循环引用可能会产生,(此时)我不明确"做"任何垃圾回收,而这个动作可能运行数周/月/年*.
*)在beanstalk中,reserve是一个阻塞调用,如果没有可用的作业,这个worker将等到从beanstalk获得任何响应.
我的问题:php如何长期处理这个问题,我是否应该采取任何特殊的预防措施来防止这种情况发生?
我确实考虑过并且可能会有所帮助(但如果我错了请更正并在可能的情况下添加更多内容):
$job在每次迭代中取消设置__destruct()从a中明确取消引用$job(注意:从这里更新)
我确实用任意工作进行了一些测试.我包括的工作是:"简单",只是设置一个值; "longarray",创建一个包含1,000个值的数组; "producer",让循环注入$pheanstalk并向队列添加三个simplejobs(所以现在有一个从job到beanstalk的引用); "locatoraware",其中Zend\Di\Locator给出了a 并且实例化了所有作业类型(尽管未调用).我在队列中添加了10,000个作业,然后我将所有作业保留在队列中.
"simplejob"的结果(每1000个工作的内存消耗,有memory_get_usage())
0: 56392
1000: 548832
2000: 1074464
3000: 1538656
4000: 2125728
5000: 2598112
6000: …Run Code Online (Sandbox Code Playgroud) php memory garbage-collection command-line-interface beanstalkd
在我的本地开发机器(php 5.3.14)上,我可以使用这样的类:
<?php
namespace Shop\Repository;
use Shop\Entity\Day;
use Doctrine\ORM\EntityRepository;
class Product extends EntityRepository
{
// Code
}
Run Code Online (Sandbox Code Playgroud)
该类存储在/my/src/Shop/Repository/Product.php(PSR-0兼容)中.我还有一个Shop\Repository\Day位于/my/src/Shop/Repository/Day.php.
但是,在我的登台服务器(php 5.3.10)上,我收到以下错误:
PHP致命错误:无法使用Shop\Entity\Day作为Day,因为该名称已在第5行的/my/src/Shop/Repository/Product.php中使用
我可以理解这条消息,如果我将我的Shop\Entity\Day别名导入DayEntity,则代码可以正常工作.但我无法理解的致命错误的原因:为什么在PHP 5.3.14这项工作(或者至少,我的配置),而不是与5.3.10(或至少,与服务器的配置)?
我想问题是因为在命名空间Shop\Repository中已经Day加载了.但这从来没有导致我的设置错误!这是怎么回事?
执行此DQL查询时出现奇怪的错误:
SELECT u FROM User u LEFT JOIN u.schedule s WHERE DATE(s.timestamp) = DATE(NOW())
Run Code Online (Sandbox Code Playgroud)
Doctrine抛出异常并显示以下消息:
Expected known function, got 'DATE'
Run Code Online (Sandbox Code Playgroud)
该问题看起来与此错误类似,但是它解决了GROUP BY子句中的DATE()函数,并且对于Doctrine 2.2,该错误已关闭.此时,我得到了doctrine 2.4-DEV的例外.
该查询旨在选择今天安排的所有用户.有什么方法可以创建这个DQL吗?我在phpMyAdmin中测试了SQL版本,并且查询不会引发错误.可能有什么问题?
我目前使用的是Netbeans 7.0.1.从关于页面:产品版本:NetBeans IDE 7.0.1(Build 201107282000).我在Ubuntu下使用Netbeans代理.
我在Netbeans网站上看到新版本7.1.2可用http://netbeans.org/downloads/index.html.
当我检查更新时,我看到:您的IDE是最新的!没有可用的更新.
问题是什么 ?我应该从网站上下载netbeans并重新安装?
谢谢
我们所有的应用程序都是php mvc,在客户端有一个非常简单的js行为层.我们想要更多地构建javascript并停止请求"片段"来执行简单的行为(比如,在整个地方加载不同的jquery插件).我们不使用javascript MVC框架,并为我们的新应用寻找最适合的解决方案.
最吸引人的解决方案之一就是像Twitter一样继续为我们渲染服务器端.他们称之为"Hijax +服务器端渲染".我们不希望在javascript中有一个完整的mvc框架,但这些来自博客的引用对我们非常有吸引力:
通过契约,我们的组件将自己附加到单个DOM节点,通过委托侦听事件,在DOM上触发事件,并通过DOM事件冒泡将这些事件广播到其他组件.[...]其次,我们所有的组件都是使用AMD定义的.
我们一直在努力构建我们自己的东西,但是如果没有高水平的javascript专业知识,我们就无法在这方面取得进展.像jquery-pjax这样的东西对于非常简单的情况来说似乎也是一个很好的解决方案.
我们正在寻找:
有没有像这样的javascript框架?随着pushState越来越多的关注,我希望有一些东西可用.有任何想法吗?
我们现在正在调查Ansible以配置我们的服务器.这是一个默认的nginx,php-fpm和mysql设置.但是,我想知道这些软件包的安装以及如何使playbook在运行的服务中具有幂等性.
对于nginx,我们有一个默认值nginx.conf和一些文件conf.d/.对于php,我们有一个php.ini,一个php-fpm.conf,一个池pool.d/和一些ini文件conf.d/.是否想要覆盖每个ansible playbook call上的所有文件?
如果所有配置都被覆盖,是否可以执行service nginx reload,service php5-fpm reload即使服务器负载很重?对于初始安装,a reload将无法启动服务器,因此我必须首先检查状态并根据它,在start和之间切换reload?
如果我寻找带有nginx安装的playbooks,他们经常使用将重启nginx的处理程序.但是,这不是优雅的,所以我不喜欢这种方法:
service: name=nginx state=restarted
Run Code Online (Sandbox Code Playgroud)
一般来说,使用ansible和配置服务器与 nginx,php-fpm和mysql等服务而不强制重启的常见模式是什么?
对于同步处理,我们使用带有 beanstalkd 队列的 supervisord。应用程序和工作代码都是用 php 编写的(使用SlmQueue)。我注意到当我们部署新代码时,新代码不适用于工作进程。我不太确定是什么原因,但我确实发现了:
service supervisor restart 不重启进程(PID保持不变)supervisorctl reload 重新加载所有进程,现在使用新代码supervisorctl 无法(据我所知)仅重新加载一个程序并保持其他程序仍在运行我正在寻找一种部署新代码的方法(通过 ansible 和 git checkout 工作)并且不需要重新启动完整的主管进程及其所有子进程。我们使用 PHP 5.5 运行 Ubuntu 12.04 机器。我猜操作码缓存可能会起作用,但我不确定如何触发这些特定文件的刷新。
有没有办法优雅地重新加载进程而不是完全重新加载所有监督子进程?或者如果原因可能是操作码缓存,是否可以使用某个触发器刷新缓存?
我们有一个包含许多实体("项目")的大列表("集合").这一切都通过RESTful接口进行管理.可以通过项目上的order属性手动对项目进行排序.查询时,数据库会根据订单列出集合中的所有项目.
现在,我们希望将此机制公开给用户,他们可以在一个调用中更新所有项目的完整排序.数据库不允许order相同collection_id(唯一collection_id+ order)相同,因此您不能(绝对不应)逐个更新所有项目.
我想到了PATCH请求,但没有考虑资源,所以
PATCH /collections/123/items/
Run Code Online (Sandbox Code Playgroud)
身体像
[
{'id': 1, 'order': 3},
{'id': 2, 'order': 1},
{'id': 3, 'order': 2}
]
Run Code Online (Sandbox Code Playgroud)
但是,如何处理此批量类型的请求的错误?当部分更新成功时,如何发送响应?是否允许PATCH集合而不是资源?如果这是错误的想法,那么更好的方法是什么?
php ×4
ajax ×1
ansible ×1
autorun ×1
bash ×1
beanstalkd ×1
boot ×1
bulk ×1
doctrine ×1
doctrine-orm ×1
dql ×1
hijax ×1
javascript ×1
linux ×1
memory ×1
mysql ×1
namespaces ×1
netbeans ×1
netbeans-7 ×1
nginx ×1
provisioning ×1
pushstate ×1
rest ×1
sorting ×1
supervisord ×1
translation ×1
ubuntu ×1