小编Rey*_*rPM的帖子

SemiFixed:缺少'secret_key_base`用于'生产'环境

我从头开始创建了一个rails应用程序(Rails 4.1.0),我遇到了一个我无法解决的问题.我已经安装并配置了Apache Passenger Module,它工作正常.每当我尝试访问虚拟主机时,都会收到错误500:

Missing secret_key_base for 'production' environment, set this value in config/secrets.yml
Run Code Online (Sandbox Code Playgroud)

secret.yml文件包含以下配置:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)

即使我不建议我这样做:

    production:
  secret_key_base: XXXXXXXXXXXXXXXXXXXXXXXXXXXX (random key)
Run Code Online (Sandbox Code Playgroud)

但Apache日志显示:

# tailf /etc/httpd/logs/error_log
[Tue May 06 12:56:18 2014] [error] [client 192.168.3.1] Premature end of script headers:
App 4405 stderr: [ 2014-05-06 12:56:18.5763 4421/0x9d48bdc(Worker 1) utils.rb:68 ]: *** Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 4421, thread 0x9d48bdc(Worker 1)):
App 4405 stderr:        from /usr/local/rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/application.rb:440:in `validate_secret_key_config!' …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku ruby-on-rails-4

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

即使我正在工作,会话生命周期,Ajax和Symfony2,会话也会过期

如果用户在10分钟内不执行任何操作,我已将应用程序配置为在超时时关闭会话.在config.yml我有这样的:

session:
    handler_id:  ~
    cookie_lifetime: 600 # 10 minutes
    gc_maxlifetime: 600 # 10 minutes
    gc_probability: 1
    gc_divisor: 1
Run Code Online (Sandbox Code Playgroud)

我每隔一分钟进行一次Ajax调用,以检查会话是否即将到期或不会过期,这是我检查的内容:

public function isLoggedInAction(Request $request)
{
    $response = array();
    $response['authenticated'] = FALSE;
    $status = 200;
    $securityContext = $this->container->get('security.context');
    if ($securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
        $response['authenticated'] = TRUE;
    }

    return new JsonResponse($response, $status ?: 200);
}
Run Code Online (Sandbox Code Playgroud)

由于一些不知情的原因不起作用,每10分钟会话都关闭,无论我是在使用页面还是不在,为什么?我错过了什么?

编辑1尝试新值,仍然无效:

session:
    handler_id:  ~
    cookie_lifetime: 1800
    gc_maxlifetime: 600
    gc_probability: 1
    gc_divisor: 100
Run Code Online (Sandbox Code Playgroud)

当我在页面上工作,执行Ajax调用和一些其他任务时,会话已关闭,因此无法正常工作.显然对我来说唯一有用的价值就是设置cookie_lifetime: 86400 #1 day,这对我来说很疯狂!

编辑2在 …

php ajax session symfony

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

使用Monolog记录整个数组

有没有办法使用Monolog记录整个数组?我一直在阅读几个文档,但没有找到以可读格式记录整个数组的方法,任何建议?

我读过的文件:

php symfony monolog symfony-2.6

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

Symfony2:检查JSON值是否响应以及测试中是否为TRUE

我已经阅读了Symfony2中的测试书,但没有找到任何有用的信息,所以,我正在为我的应用程序中的控制器创建测试,这是我试图测试的控制器(只是相关代码):

public function createCompanyAction(Request $request) {
    $response = array();
    $response["success"] = false;

    try {
    if (statement) {
            // do the magic here
            $response["success"] = true;
        } else {
            $response['errors'] = "some error";
        }
    } catch (Exception $ex) {
        $response["exception"] = $ex->getMessage();
    }

    return new JsonResponse($response);
} 
Run Code Online (Sandbox Code Playgroud)

只有$responsesuccess密钥中有TRUE值但我不知道如何从我的测试控制器检查它时,测试才会通过.这是我的代码:

$client->request('POST', '/create-company', $data);
$response = $client->getResponse();

$this->assertEquals(200, $client->getResponse()->getStatusCode(), 'HTTP code is not 200');
$this->assertTrue($response->headers->contains('Content-Type', 'application/json'), 'Invalid JSON response');

$this->assertNotEmpty($client->getResponse()->getContent());
Run Code Online (Sandbox Code Playgroud)

我怎么检查这个?

php testing json symfony

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

VirtualHost在CentOS 7上的Apache 2.4.6下无法运行

我正在尝试在CentOS 7上的Apache 2.4.6中设置一些VH,但由于它不起作用而没有成功.这是我现在尝试过的:

  • 因为in /etc/httpd/conf/httpd.conf是这一行,Include conf.modules.d/*.conf然后我创建一个文件/etc/httpd/conf.d/vhost.conf并将其放在其中:

    NameVirtualHost *:80
    
    <VirtualHost *:80>
         ServerName webserver
         ServerAlias localhost devserver development
         DocumentRoot /var/www/html
    </VirtualHost>
    
    Run Code Online (Sandbox Code Playgroud)
  • 重新加载/重新启动Apache服务(同时尝试):

    service httpd reload|restart
    
    Run Code Online (Sandbox Code Playgroud)
  • 在Windows端编辑文件C:\Windows\system32\drivers\etc\hosts并添加以下行:

    192.168.3.131  webserver localhost devserver development # this is the IP of Apache Server
    
    Run Code Online (Sandbox Code Playgroud)
  • 打开浏览器并尝试:http://webserver,http://devserver两者都进入默认的Apache页面,因此VH不起作用.

  • /var/www/html/index.php用这行代码放下一个文件<?php phpinfo(); ?>只是为了知道哪些模块是Apache加载,结果如下:

    core mod_so http_core mod_access_compat mod_actions mod_alias mod_allowmethods mod_auth_basic mod_auth_digest 
    mod_authn_anon mod_authn_core mod_authn_dbd mod_authn_dbm mod_authn_file mod_authn_socache mod_authz_core 
    mod_authz_dbd mod_authz_dbm mod_authz_groupfile mod_authz_host mod_authz_owner mod_authz_user mod_autoindex 
    mod_cache mod_cache_disk …
    Run Code Online (Sandbox Code Playgroud)

php linux centos apache2 apache2.4

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

在Nelmio Alice夹具生成器中将参数设置为数组

我问是否可以将数组作为某些元素的值传递?例如,在我的情况下,我正在尝试为FOSUserBundle User实体设置角色,该实体采用roles值数组而不是普通值.我的夹具中有这个:

UserBundle\Entity\User:
    User0:
        username: admin
        email: admin@local.com
        enabled: 1
        plainPassword: admin
        roles: [ROLE_ADMIN]
        groups: @Group0

    User{1..10}:
        username: <firstNameMale>
        email: <companyEmail>
        enabled: <boolean(35)>
        plainPassword: <lexify>
        roles: 35%? [ROLE_ADMIN, ROLE_USER, ROLE_PROFILE_ONE, ROLE_PROFILE_TWO]
        groups: @Group*
Run Code Online (Sandbox Code Playgroud)

但它没有用,我收到了这个错误:

[Symfony的\元器件\调试\异常\ ContextErrorException]捕致命错误:传递给FOS\UserBundle \模型\用户:: setRoles(参数1)必须是类型阵列,给定的字符串,称为在/ var的/ WWW/HTML /在线路483供应商/ nelmio /爱丽丝/ SRC/Nelmio /爱丽丝/装载机/ Base.php和/var/www/html/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Model/User.php线530限定

对此有何建议?

更新答案

在YAML文件中使用第一种方法使用plain数组:

在做出一些改变之后@frumious建议夹具现在有这样的内容:

UserBundle\Entity\User:
    User0:
        username: admin
        email: admin@local.com
        enabled: 1
        plainPassword: admin
        roles: [ROLE_ADMIN]
        groups: @Group0

    User{1..10}:
        username: <firstNameMale>
        email: <companyEmail>
        enabled: <boolean(35)>
        plainPassword: <lexify>
        roles: [ROLE_PROFILE_ONE, ROLE_PROFILE_TWO]
        groups: …
Run Code Online (Sandbox Code Playgroud)

php fixtures symfony

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

如何在composer.json中覆盖其他依赖项

我正在使用AliceFixturesBundles,这取决于NelmioAliceFaker.依赖性在内部处理,例如:

https://github.com/h4cc/AliceFixturesBundle/blob/master/composer.json

{
    "name": "h4cc/alice-fixtures-bundle",
    "description": "Symfony2 Bundle for loading fixture data with the Alice library.",
    "keywords": ["Symfony2", "Fixtures", "Alice", "Loader", "Doctrine", "ORM", "MongoDB"],
    "type": "symfony-bundle",
    "license": "MIT",
    "authors": [
        {
            "name": "Julius Beckmann",
            "email": "github@h4cc.de"
        }
    ],
    "require": {
        "php": ">=5.3.0",
        "nelmio/alice": "~1.6",
        "doctrine/common": "~2.1",
        "psr/log": "~1.0",
        "symfony/finder": "~2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0",
        "symfony/framework-bundle": "~2.1",
        "doctrine/orm": "~2.1",
        "doctrine/mongodb-odm": "1.0.*@dev",
        "doctrine/mongodb-odm-bundle": "3.0.*@dev",
        "matthiasnoback/symfony-config-test": "~0.2.1"
    },
    "autoload": {
        "psr-4": {
            "h4cc\\AliceFixturesBundle\\": ""
        }
    } …
Run Code Online (Sandbox Code Playgroud)

php symfony composer-php symfony-2.6

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

如何检查是否在Doctrine2存储库中找到了对象?

我通过它的PK找到一个实体如下:

$ent = $em->getRepository('AppBundle:Representative')->find($id)
Run Code Online (Sandbox Code Playgroud)

检查是否$ent是真正的代表对象的正确方法是什么?我的意思与真实的是,$ent目前存在于数据库,因为我正计划使用相同的结果返回INSERTUPDATE.在伪代码中,我的头脑是:

if (ent is Representative)
{
    // Update its values
} else {
    // Create a new Representative
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用is_object()甚至instanceof但是我不确定他们是否会完成这项工作,或者$ent即使代表在DB上不存在也是一个对象.有什么建议吗?我怎么能做到这一点?

php symfony doctrine-orm symfony-2.6 symfony-2.7

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

如何从Windows中的Docker容器访问“ http:// localhost”?

我有一组在Windows 10中使用Docker运行的容器,这是输出docker-compose ps

> docker-compose ps
     Name                    Command               State                          Ports
--------------------------------------------------------------------------------------------------------------
db_mysql          docker-entrypoint.sh mysqld      Up      3306/tcp
elk               /usr/bin/supervisord -n -c ...   Up      0.0.0.0:81->80/tcp
php71-fpm-nginx   /config/bootstrap.sh             Up      443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:9001->9001/tcp
Run Code Online (Sandbox Code Playgroud)

这是输出docker inspect

> docker inspect php71-fpm-nginx
[
    {
        ...
            "NetworkMode": "anotherlampdocker_default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ],
                "9001/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "9001"
                    }
                ]
            },
        ...
        "Mounts": [
            {
                "Source": "/d/Development/www",
                "Destination": "/data/www",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }, …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-networking docker-container

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

如何在 Ubuntu 18.04 上为 Postgres 启用 php pdo 驱动程序

我在 Ubuntu 18.04 上安装了 php 7.2 和 php 7.3,并创建了一个 php 文件来登录并将数据插入 Postgres 数据库。我的脚本响应“找不到驱动程序”。

研究表明我必须编辑 php.ini 文件并启用 Postgres 和 PDO 的扩展。下面是 php.ini 文件中的所有 extension= 行。我能找到的最接近的是下面显示的 pdo 线。

extension=pdo_pgsql
extension=pgsql
Run Code Online (Sandbox Code Playgroud)

所以我编辑了 php.ini 文件并从每一行中删除了分号以启用它们。然后我重新启动了Apache2:

sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

但我仍然得到“找不到驱动程序”。

这是来自 php.ini 文件的完整扩展列表。我需要启用哪些其他扩展才能允许 PDO 访问 Postgres?

php.ini 7.3

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql …
Run Code Online (Sandbox Code Playgroud)

php pdo

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