我很惊讶地发现在nginx访问日志中找不到有关记录请求协议的任何信息.我通常共享HTTP(80)和HTTPS(443)流量的服务器块,并使用组合访问日志.我想在访问日志的每一行中指明请求是通过HTTP还是HTTPS.
这是可能的,还是我需要为HTTPS使用单独的服务器块并为SSL指定单独的访问日志?
我在jQuery移动应用程序上有一个页面,它有一个标签小部件,如下所示:
<div data-role="tabs" id="dashboard-tabs">
<div data-role="navbar">
<ul>
<li><a href="#tab-events" data-ajax="false" class="ui-icon-calendar ui-btn-icon-left">Upcoming Events</a></li>
<li><a href="#tab-news" data-ajax="false" class="ui-icon-info ui-btn-icon-left">Latest News</a></li>
</ul>
</div>
<div id="tab-events">
...
</div>
<div id="tab-news">
...
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我直接在浏览器中加载包含此标记的页面时,一切正常.
但是,如果我从另一个页面导航到这个页面,事情会变得奇怪.整个页面第二次加载,并</ul>在原始标记结束后插入新的div 中.看起来这只是默认选项卡.
我认为当包含它的页面通过AJAX加载完整的浏览器页面加载时,jQuery mobile正在做一些奇怪的事情.我只是无法弄清楚为什么或导致它的原因!
编辑:我已经为此付出了赏金.我忘了提到我正在使用jQuery 1.11和jQuery Mobile 1.4.1.我有jQuery UI标记的原因是因为jQuery Mobile显然直接从那里获取了标签小部件,没有改变.
我登录时pageinit和pageshow被调用.当我单击指向包含选项卡的页面的链接时,每个事件将被触发两次,一次一个.第二pageinit和pageshow是从被动态插入到从JQM页面,而不是从该装载有第一应用负载原始JS JS执行.无论发生什么,都会导致整个页面被重新加载并插入到DOM中,所有的JS都会被第二次执行.
编辑2:请注意,这是在没有发生任何我自己的自定义JavaScript的.之前我只是绑定到pageinit和pageshow所以我可以记录他们被解雇时,就是这样.此外,选项卡中的内容似乎也无关紧要.仅仅将选项卡窗格设置为空白并不能解决问题.
编辑3: 这是一个演示问题的链接.我已经删除了演示问题的链接,因为它是在我的个人网站上托管的,我确认这是一个错误.
我有Application一个关系ApplicationFile:
/**
* @ORM\OneToMany(
* targetEntity="AppBundle\Entity\ApplicationFile",
* mappedBy="application",
* cascade={"remove"},
* orphanRemoval=true
* )
*/
private $files;
Run Code Online (Sandbox Code Playgroud)
文件实体具有存储二进制数据的字段,并且最大可以为2MB.迭代大量应用程序及其文件时,PHP内存使用量会增加.我想保持低调.
我试过这个:
$applications = $this->em->getRepository('AppBundle:Application')->findAll();
foreach ($applications as $app) {
...
foreach ($app->getFiles() as $file) {
...
$this->em->detach($file);
}
$this->em->detach($app);
}
Run Code Online (Sandbox Code Playgroud)
分离对象应告诉实体管理器停止关注此对象并取消引用它,但它令人惊讶地对内存使用量没有影响 - 它会不断增加.
相反,我必须手动加载应用程序文件(而不是通过关联方法检索它们),并且内存使用量不会增加.这有效:
$applications = $this->em->getRepository('AppBundle:Application')->findAll();
foreach ($applications as $app) {
...
$appFiles = $this
->em
->getRepository('AppBundle:ApplicationFile')
->findBy(array('application' => $application));
foreach ($appFiles as $file) {
...
$this->em->detach($file);
}
$this->em->detach($app);
}
Run Code Online (Sandbox Code Playgroud)
我曾经xdebug_debug_zval跟踪$file对象的引用.在第一个例子中,有一个额外的引用,这解释了为什么内存膨胀 - PHP无法垃圾收集它! …
我正在艰难地从生产中运行的应用程序中诊断出500错误.我之前已经开始工作了,但是在通过Capastrano重新部署之后我无法理解它.
以下是事实:
RAILS_ENV=production bundle exec rails console并执行Active Record操作(比如从数据库中检索数据).app.get("/"),它也返回500错误(在首次显示运行以加载模型的查询之后).因为没有记录任何用途,我不知道该怎么做.我已经尝试在没有帮助的情况下在整个app目录上设置完全权限.多次重启服务器,什么都没有.数据库就在那里,rails可以清楚地与它通信.我不知道我做了什么让它第一次运行.我只是不知道为什么rails没有输出任何东西到日志.
我正在使用Git跟踪虚拟机的XML配置更改.许多XML配置都是类似的,只有少数字段不同.我经常删除VM配置并添加新配置.将这些更改添加到repo时,Git会将其视为文件重命名,只需进行一些更改.我可以看到为什么git会这样做,并理解它的用例.
我想知道是否有办法防止这种情况,而是让git将其视为文件删除而不是创建新文件.查看提交日志时,更容易辨别"哦,看起来就像这一天我删除了这个VM并创建了一个新的"
我有一个"事务"(扩展ActiveRecord :: Base).我有两种不同类型的交易,即"购买"或"捐赠".两者之间有足够的重叠,因此不需要创建两个单独的数据库表,因此我只有一个表用于具有"item_type"列的事务.
但是,购买和捐赠有不同的方法和验证,因此将它们分成两个不同的控制器和模型是有意义的.我没有创建ActiveBase模型(减去表格),而是尝试为每个模型使用模块.
以下是Purchase模块的外观.
module Purchase
def self.included(base)
base.validates :amount,
:presence => true
end
def testing
"testing"
end
end
Run Code Online (Sandbox Code Playgroud)
以下是如何创建一个:(此代码位于Purchases控制器的create操作中)
@purchase = Transaction.new(params[:purchase]).extend(Purchase)
Run Code Online (Sandbox Code Playgroud)
我可以打电话给@ purchase.testing并返回"测试".但是,该验证尚未运行.
如果我在交易模型上以传统方式包含模块,使用"包含购买",那么它们就可以工作.
我有什么想法可以让这个工作流程发生?我跟着这一点:http://paulsturgess.co.uk/articles/84-how-to-include-class-and-validation-methods-using-a-module-in-ruby-on-rails
以下是否存在性能差异?
SELECT person.id
FROM person
LEFT JOIN address ON person.id = address.personID
WHERE address.personID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
VS
SELECT person.id
FROM person
INNER JOIN address ON person.id = address.personID
Run Code Online (Sandbox Code Playgroud)
此查询应显示具有地址记录的所有人员ID(并非所有人都这样做).这里合乎逻辑的做法是使用内部连接,如第二个示例所示.由于不完全重要的原因(查询是从查询构建器生成的),我可能必须使用第一种方法.
好奇是什么影响.MySQL在LEFT JOIN中做了很多额外的工作,然后将该字段与null进行比较以减少设置吗?也许这就是INNER JOIN如何在幕后工作?
TL;博士:
我的Person实体表单上有一个未映射的字段,我需要对其进行验证.我已经按照这篇关于如何执行此操作的精彩文章,但我的用例略有不同,并未完全涵盖在文章中.
我正在创建自己的Unique Constraint,需要运行自定义查询来确定唯一性.要运行查询,我需要访问提交的字段值以及原始Person对象(如果是更新操作,我可以获取它的ID).如果没有该Person对象,我将无法在唯一性查询期间将其排除在外.
如果我在PersonType类上应用验证器,如下所示:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver
->setDefaults(array(
'data_class' => 'CS\AcmeBundle\Entity\Person',
'constraints' => array(
new MyUniqueValidator(),
)
))
;
}
Run Code Online (Sandbox Code Playgroud)
然后验证器将传递整个Person对象以执行验证.这对我没有帮助,因为提交的表单数据不会持久保存到Person对象(它是我$form->isValid()在控制器中调用之后处理的未映射字段).
如果我直接将验证器应用于未映射的字段:
$builder
->add('myUnmappedField', 'text', array(
'mapped' => false,
'constraints' => array(
new MyUniqueValidator(),
)
),
))
Run Code Online (Sandbox Code Playgroud)
然后我传递给验证器的对象只是独立的表单文本,没有别的.我没有Person通过唯一性查询执行的ID 对象(如果它是更新操作).
希望我已经正确解释了这一点.我有任何选择优雅地进行此类验证吗?
我想模拟validate一个接口的方法,并让所有其他接口方法存根返回null(我真的不关心它们会发生什么),但似乎没有办法轻松地做到这一点.
这就是我所拥有的:
$validator = $this
->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface')
->setMethods(array('validate'))
->getMock();
$validator
->expects($this->once())
->method('validate')
->willReturn(array());
$validator->validate();
Run Code Online (Sandbox Code Playgroud)
运行这个给我一个致命的错误:
类Mock_ValidatorInterface_56c4c003包含6个抽象方法,因此必须声明为abstract或实现其余方法
所以 - 我需要以某种方式告诉PHPUnit存根接口所需的其他方法.这样做的正确方法是什么?
关于bundler如何处理文件Gemfile和Gemfile.lock,我现在有点困惑.
在我的Gemfile中,我有以下内容
group :development do
gem 'ruby-debug19', :require => 'ruby-debug'
end
Run Code Online (Sandbox Code Playgroud)
在制作上,我跑了bundle install --without development.但是,在Gemfile.lock中,'ruby-debug19'仍然列在文件底部的DEPENDENCIES下,并且gem和它需要的内容列在上面的主列表中.
什么是--without选项真的这么做?我没有为生产安装ruby-debug19所需的宝石,因为它是生产的.
我是Rails的新手,我正在使用v3.2