我从头开始创建了一个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) 如果用户在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在 …
有没有办法使用Monolog记录整个数组?我一直在阅读几个文档,但没有找到以可读格式记录整个数组的方法,任何建议?
我读过的文件:
我已经阅读了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)
只有$response
在success
密钥中有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)
我怎么检查这个?
我正在尝试在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)我问是否可以将数组作为某些元素的值传递?例如,在我的情况下,我正在尝试为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) 我正在使用AliceFixturesBundles,这取决于NelmioAlice和Faker.依赖性在内部处理,例如:
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) 我通过它的PK找到一个实体如下:
$ent = $em->getRepository('AppBundle:Representative')->find($id)
Run Code Online (Sandbox Code Playgroud)
检查是否$ent
是真正的代表对象的正确方法是什么?我的意思与真实的是,$ent
目前存在于数据库,因为我正计划使用相同的结果返回INSERT
和UPDATE
.在伪代码中,我的头脑是:
if (ent is Representative)
{
// Update its values
} else {
// Create a new Representative
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用is_object()
甚至instanceof
但是我不确定他们是否会完成这项工作,或者$ent
即使代表在DB上不存在也是一个对象.有什么建议吗?我怎么能做到这一点?
我有一组在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) 我在 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 ×8
symfony ×6
symfony-2.6 ×3
ajax ×1
apache2 ×1
apache2.4 ×1
centos ×1
composer-php ×1
docker ×1
doctrine-orm ×1
fixtures ×1
heroku ×1
json ×1
linux ×1
monolog ×1
pdo ×1
ruby ×1
session ×1
symfony-2.7 ×1
testing ×1