小编Bra*_*ram的帖子

Vagrant Ansible配置SSH错误

我正在尝试做一些Vagrant/Ansible的东西,但从一开始就遇到问题.这是我的Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"

  config.vm.network "private_network", ip: "192.168.6.66"

  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "site.yml"
  end
end
Run Code Online (Sandbox Code Playgroud)

site.yml很简单

---
- name: Bring up server with MySQL, Nginx, and PHP-FPM
  hosts: all
  remote_user: root

  roles:
    - common
Run Code Online (Sandbox Code Playgroud)

和common/tasks/main.yml是

---
- name: Update apt
  apt: update_cache=yes
Run Code Online (Sandbox Code Playgroud)

这样做vagrant up,输出是

Bringing machine 'default' up with 'virtualbox' provider...
==> default: …
Run Code Online (Sandbox Code Playgroud)

vagrant ansible

7
推荐指数
2
解决办法
8940
查看次数

从Git存储库部署PHP网站

我试图围绕Git并使用(或不使用)部署网站.我一直在谷歌上搜索和阅读,但无法找到我的具体案例或疑虑的答案.我仍然处于这样做的计划阶段,但是我想从一开始就把它弄好,并找到适合我的工作流程.我将尽可能清楚地解释这种情况:

我有一个远程VPS,在www.example.com上运行我的实时网站,在dev.example.com上运行开发版本(它们位于/ var/www/example/htdocs /和/ var/www/example/subdomains/dev /).

开发是从/opt/git/example.git/中的裸存储库运行的.在裸仓中有一个主人和开发分支.我和其他开发人员都在本地计算机上拥有此存储库的副本.我们从开发部门撤出并从那里开始工作.我们的想法是dev.example.com拥有来自开发分支的最新代码,一旦经过适当的测试,我们就会合并到master中,添加一个标签并更新example.com(基本上就是这个git流).

我在Git IRC频道上找到的第一种方法是使用钩子来更新存储库,但这种感觉非常有限,有时也是不需要的,我想在推送后自己在服务器上运行命令,这会更新开发环境.另一个命令(或shell脚本)将在合并开发后从主分支更新实时站点.我也找到了卡皮斯特拉诺,但此刻似乎有点过头了.

在阅读时,我发现很多人建议在遥控器上再创建两个克隆:一个用于实时网站,一个用于开发网站,必要时可以分支.然而,这也使得版本控制文件可以通过网络访问,这是我不想要的.理想情况下,我想要一个没有任何git文件或文件夹的"干净"副本.

我还发现了一种使用git archive的方法,但是从我的裸存储库运行git archive只允许我存档master分支.我使用git archive --format=tar HEAD | (cd /var/www/example/htdocs/ && tar xf -)/opt/git/example.git/中的命令执行此操作.

我觉得这种git archive方法让我最接近答案,但我受限于缺乏Git知识.我可以改变命令使用分支而不是HEAD(当我尝试使用origin/master而不是HEAD时,我收到错误)?有谁能指出我正确的方向?

git deployment

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

Google Apps和OAuth最佳做法

我正在努力将Google Apps集成到我的PHP应用中.我已经有一个登录系统,为用户分配一个会话ID(在输入用户名和密码后),当用户登录时,该系统会存储在数据库中.会话ID在一段时间不活动后变为无效(可由用户配置) ,可以是5分钟,15,60 ......).该会话ID在URL中传递,以检查用户是否仍然登录.注销时,会从数据库中删除会话ID.

我让人们通过将他们的Google ID存储在数据库中来登录Google,当他们登录时,我请求访问令牌,查询userinfo,查看google ID是否在数据库中,如果是,请为此分配会话ID用户.由于我希望能够查询其他API,我还将访问令牌json存储在数据库中.当用户注销时,也会从数据库中删除访问令牌.

这样做,我的用户可以使用他们的Google帐户登录,我可以使用存储的access_token查询API,但有些事情让我感到笨拙,让我对我的工作流程感到不确定:

  • 如果你使用force_approval得到一个refresh_token,我觉得我应该使用这个刷新令牌来获取一个新的访问令牌,而不是从用户再次登录时从数据库中删除旧的并输入一个新的令牌.另一方面,登录时,我不知道它是谁,所以我不知道使用哪个刷新令牌.也许我误解了刷新令牌的用途.另外,我真的不想每次强制批准,所以在这种情况下我甚至无法使用refresh_token.

  • 如前所述,用户可以确定他们的会话将持续多长时间,但是,google access_token总是会在3600秒后过期.如果用户在系统上工作一小时并且之后谷歌API突然失败,迫使他们再次登录,那真是太愚蠢了.Google OAuth游乐场会显示一个复选框"在其过期前自动刷新令牌",但我没有看到如何执行此操作.我必须在这里使用刷新令牌吗?或者只是在后台请求一个新令牌(如果我没有强制批准)?

  • 目前,我正在使用userinfo查询(https://www.googleapis.com/oauth2/v2/userinfo)查找用户ID,但我也可以使用tokeninfo(https://www.googleapis. COM /的oauth2/V1/tokeninfo).Tokeninfo未在oauth playground中列出,但结果确实显示了令牌保持有效的时间(但是,我也可以自己计算).一个比另一个好吗?

  • 我将整个json对象存储在数据库中(access_token,id_token,expires_in和token_type)但我觉得如果我只存储access_token,我的应用程序仍然可以正常工作(我预见的唯一问题是expires_in时间是否有变化).我需要存储id_token吗?

我发现Google文档(在developers.google.com上)有时非常缺乏,如果有人知道任何其他好的信息来源,我也对它们感兴趣.

php oauth google-apps oauth-2.0

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

Symfony2使用额外的权限扩展ACL

我想在我的项目中实现Symfony2 ACL.但是,基本权限(VIEW,EDIT ...)对我来说还不够.我需要至少两个额外的权限,即COPY和REVIEW.

一些周围挖后,我发现,我将最有可能不得不重写/扩展Symfony/Component/Security/Acl/Permission/BasicPermissionMap.phpSymfony/Component/Security/Acl/Permission/MaskBuilder.php.

Symfony/Bundle/SecurityBundle/Resources/config/security_acl.xml我找到一条引用权限映射的行:

<parameter key="security.acl.permission.map.class">Symfony\Component\Security\Acl\Permission\BasicPermissionMap</parameter>
Run Code Online (Sandbox Code Playgroud)

我尝试覆盖这个app/config/config.yml,但是没有用(我得到一个错误,权限配置密钥是未知的,或类似的东西).

我一直在看服务,通过使用app/console container:debug,但我找不到任何相关服务覆盖那里.

有人能指出我正确的方向吗?

php symfony

2
推荐指数
1
解决办法
1280
查看次数

捕获链接点击(事件冒泡)

我对原始 JavaScript 相当陌生(习惯于使用 jQuery)。我需要捕获一些链接的点击,阻止默认操作,然后根据链接 href 执行某些操作。

有些链接是直接的<a href="example.com">Lorem</a>,但其他链接可能包含其他 html 元素(图像、跨度...)。我将相同的事件处理程序绑定到所有必要的链接。我使用了一个解决方法函数,但在 Chrome 中它使用addEventListener,useCapture是 false。

在我的事件处理程序中,我用来event.target.getAttribute('href')获取链接指向的位置。这在处理第一种链接时有效,但在单击图像或跨度时不起作用,因为 event.target 是图像或跨度,而不是链接。我猜这与事件冒泡有关,但我不太确定解决方案是什么。

javascript event-bubbling dom-events

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