使用 ansible 大约一周后,我发现 ansible 花费的时间相似,无论它要执行的任务有多复杂。
虽然我可以使用单个命令轻松安装 20 个软件包,但
模板需要循环运行,因此如果我有 20 个配置文件要复制,则需要整整一分钟的时间。
将其扩展到 10 个角色,其中一些角色重复 5 次,您可以用一个多小时来完成简单的部署。
ansible 应该这么慢吗?或者我可以做些什么来提高性能?
编辑:
根据您的回答,我认为这不是正常行为。以下是@U880D 要求的这些简单任务的一些代码示例。正如我所说,没有什么特别的,只是简单的配置:
# tasks/main.yml
- name: Configure php-{{ php_version }}
template:
src: '{{ item }}.j2'
dest: '/etc/php/{{ php_version }}/{{ item }}'
loop:
- cli/conf.d/50-memory.ini
- fpm/conf.d/50-memory.ini
- fpm/conf.d/50-opcache.ini
- fpm/pool.d/www.conf
notify:
- restart php {{ php_version }}
Run Code Online (Sandbox Code Playgroud)
# templates/fpm/conf.d/50-memory.ini.j2
memory_limit = {{ php_fpm_memory_limit }}
post_max_size = {{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建自定义列类型,但 SQL 需要依赖于自定义参数。默认类型处理这些参数没有问题,例如。字符串类型有长度。如何为我的类型添加一个。
我正在尝试做的示例:
class EnumType extends Type
{
const ENUM = 'enum';
public function getName(): string
{
return self::ENUM;
}
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
{
$class = $fieldDeclaration['class'];
if (!is_subclass_of($class, Enum::class)) {
throw new \Exception('You must specify a valid enum class');
}
$values = call_user_func([$class, 'getValues']);
return "ENUM('" . implode("', '", $values) . "')";
}
public function convertToPHPValue($value, AbstractPlatform $platform): ?Point
{
return $value;
}
public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
{
return $value;
}
public …Run Code Online (Sandbox Code Playgroud) 我有一些共享通用代码但并不完全相同的图像。有没有办法在 docker-compose 中创建一个基本映像,以便它在执行时不会自行运行,docker-compose up并且我能够在我的 Dockerfiles 中扩展它?
这是我想要实现的示例:
version: '3'
services:
php:
build:
context: .
dockerfile: ./php/Dockerfile
php-fpm:
build:
context: .
dockerfile: ./php-fpm/Dockerfile
php-cron:
build:
context: .
dockerfile: ./php-cron/Dockerfile
php-worker:
build:
context: .
dockerfile: ./php-worker/Dockerfile
Run Code Online (Sandbox Code Playgroud)
基础dockerfile
FROM php:7.2-fpm-alpine
RUN docker-php-ext-install bcmath
... and other extensions
Run Code Online (Sandbox Code Playgroud)
以及其他 dockerfiles(有小的变化):
php-fpm
FROM my-docker-compose:php
RUN docker-php-ext-install php-fpm
CMD php-fpm
Run Code Online (Sandbox Code Playgroud)
php-cron
FROM my-docker-compose:php
COPY php/crontab /tmp/crontab
RUN /usr/bin/crontab -u www-data /tmp/crontab
CMD crond
Run Code Online (Sandbox Code Playgroud) 是否可以将变量从组件传递到插槽中。这是一个例子:
{{-- index.blade.php --}}
@component('slider', ['entities' => [0, 1, 2]])
@slot('title')
Slider title
@endslot
@slot('slide')
Slider content no {{ $entity }}
@endslot
@endcomponent
{{-- slider.blade.php --}}
<h1>{{ $title }}</h1>
<ul>
@foreach($entities as $entity)
<li>{{ $slide }}</li>
@endforeach
</ul>
Run Code Online (Sandbox Code Playgroud)
当前结果:
异常:未定义$ entity
预期结果:
<h1>Slider title</h1>
<ul>
<li>Slider content no 0</li>
<li>Slider content no 1</li>
<li>Slider content no 2</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
基于角色的 ansible 文档,我可以通过创建文件来创建多个角色入口点:
playbooks/roles/my_role/tasks/main.yml
playbooks/roles/my_role/tasks/other.yml
Run Code Online (Sandbox Code Playgroud)
我可以main.yml使用以下代码添加默认角色:
---
- name: Example 1
hosts: <hostnames>
roles:
- my_role
Run Code Online (Sandbox Code Playgroud)
但我该如何使用other.yml入口点呢?
我希望它是这样的,但这些都不起作用:
---
- name: Example 1
hosts: <hostnames>
roles:
- my_role:other
- my_role/other
- my_role.other
Run Code Online (Sandbox Code Playgroud) 每次我运行doctrine:migrations:diff为我的更改生成迁移时,它总是包括删除一些不由学说处理的表,例如:
$this->addSql('DROP TABLE messenger_messages');
$this->addSql('DROP TABLE monitoring');
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉doctrine特定的桌子不属于他,这样doctrine就不会每次都尝试删除它们?
我试图找到有关使用Symfony Flex的任何文档,但到目前为止还没有运气。
几乎所有文档都指向安装使用symfony Flex的捆绑软件,而不是如何创建使用它的捆绑软件。
我什至试图对某些软件包进行反向工程,但是再一次,没有运气。
我的目标是为中的捆绑包生成一个默认配置文件config/packages/my_bundle.yaml。
我需要知道的是我需要在哪里放置它以及可以使用哪些env变量(如果有)?
我想转换一个如下所示的数组:
['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)
到一个看起来像这样的对象:
{
foo: true,
bar: true,
baz: true,
}
Run Code Online (Sandbox Code Playgroud)
在大多数语言中,您都会有某种形式的fill(keys, value)函数:
var array = ['foo', 'bar', 'baz'];
var object = fill(array, true);
// object = { foo: true, bar: true, baz: true}
Run Code Online (Sandbox Code Playgroud)
但在 JS 中,我只能使用范围而不是键列表找到数字键。有没有一个填充函数可以做到这一点?
大约半年前,一位开发人员搞砸了,并将一个他不应该的分支(我们的 alpha 测试分支)合并到 master 中。我们通过恢复合并很快解决了这个问题。
快进 6 个月了,今天我试图合并那个错误合并中落在 master 上的分支之一,但 git 说我不能。该分支的更改不在 master 上,但 git 不允许合并。
有没有办法强制合并?
symfony ×3
ansible ×2
doctrine ×2
ansible-role ×1
components ×1
docker ×1
doctrine-orm ×1
git ×1
javascript ×1
laravel ×1
merge ×1
mysql ×1
php ×1
symfony-flex ×1
symfony4 ×1