小编Bri*_*ian的帖子

在nginx中记录请求协议?

我很惊讶地发现在nginx访问日志中找不到有关记录请求协议的任何信息.我通常共享HTTP(80)和HTTPS(443)流量的服务器块,并使用组合访问日志.我想在访问日志的每一行中指明请求是通过HTTP还是HTTPS.

这是可能的,还是我需要为HTTPS使用单独的服务器块并为SSL指定单独的访问日志?

nginx

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

使用Tabs小部件导航到页面会导致整个页面在选项卡面板中重新加载

我在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显然直接从那里获取了标签小部件,没有改变.

我登录时pageinitpageshow被调用.当我单击指向包含选项卡的页面的链接时,每个事件将被触发两次,一次一个.第二pageinitpageshow是从被动态插入到从JQM页面,而不是从该装载有第一应用负载原始JS JS执行.无论发生什么,都会导致整个页面被重新加载并插入到DOM中,所有的JS都会被第二次执行.

编辑2:请注意,这是在没有发生任何我自己的自定义JavaScript的.之前我只是绑定到pageinit和pageshow所以我可以记录他们被解雇时,就是这样.此外,选项卡中的内容似乎也无关紧要.仅仅将选项卡窗格设置为空白并不能解决问题.

编辑3: 这是一个演示问题的链接.我已经删除了演示问题的链接,因为它是在我的个人网站上托管的,我确认这是一个错误.

jquery jquery-ui jquery-mobile

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

学说:为什么通过关联访问实体时我不能释放内存?

我有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无法垃圾收集它! …

symfony doctrine-orm

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

如何正确诊断500错误(Rails,Passenger,Nginx,Postgres)

我正在艰难地从生产中运行的应用程序中诊断出500错误.我之前已经开始工作了,但是在通过Capastrano重新部署之后我无法理解它.

以下是事实:

  1. 服务器是用nginx + passenger设置的,我正在使用PostgreSQL.
  2. 静态资产正常工作,因为我能够在浏览器中正常访问它们.
  3. 我可以通过rails控制台访问RAILS_ENV=production bundle exec rails console并执行Active Record操作(比如从数据库中检索数据).
  4. 在控制台中,我可以运行app.get("/"),它也返回500错误(在首次显示运行以加载模型的查询之后).
  5. 永远不会写入production.log文件.我已经为它设置了777权限.我还将日志级别设置为:debug,无需显示任何内容.
  6. nginx日志(乘客也使用)显示没有错误的迹象,它只是通知缓存未命中.

因为没有记录任何用途,我不知道该怎么做.我已经尝试在没有帮助的情况下在整个app目录上设置完全权限.多次重启服务器,什么都没有.数据库就在那里,rails可以清楚地与它通信.我不知道我做了什么让它第一次运行.我只是不知道为什么rails没有输出任何东西到日志.

capistrano ruby-on-rails passenger nginx ruby-on-rails-3

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

防止git将删除和新文件视为移动更改

我正在使用Git跟踪虚拟机的XML配置更改.许多XML配置都是类似的,只有少数字段不同.我经常删除VM配置并添加新配置.将这些更改添加到repo时,Git会将其视为文件重命名,只需进行一些更改.我可以看到为什么git会这样做,并理解它的用例.

我想知道是否有办法防止这种情况,而是让git将其视为文件删除而不是创建新文件.查看提交日志时,更容易辨别"哦,看起来就像这一天我删除了这个VM并创建了一个新的"

git

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

在运行时动态地将模块包含到模型中?

我有一个"事务"(扩展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

ruby ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
2165
查看次数

MySQL内连接VS左连接w/IS NOT NULL?

以下是否存在性能差异?

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如何在幕后工作?

mysql

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

在未映射的字段上添加自定义验证器,但是使用整个表单提交的上下文?

TL;博士:

  1. 我需要一个自定义验证约束来在未映射的表单字段上运行
  2. 我需要表单操作的对象的ID,以免考虑做我的验证约束
  3. 将验证附加到表单本身或未映射的字段不会给我足够的上下文来运行我的验证查询

我的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 对象(如果它是更新操作).

希望我已经正确解释了这一点.我有任何选择优雅地进行此类验证吗?

symfony-forms symfony

6
推荐指数
1
解决办法
3089
查看次数

如何模拟界面的一种方法?

我想模拟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存根接口所需的其他方法.这样做的正确方法是什么?

php phpunit

6
推荐指数
1
解决办法
229
查看次数

Bundler如何利用Gemfile.lock加载gem?

关于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

rubygems ruby-on-rails bundler ruby-on-rails-3

5
推荐指数
1
解决办法
1253
查看次数