创建一个随时可用的symfony 2应用程序zip

Vin*_*rat 5 deployment assets symfony assetic

我创建了一个symfomy应用程序包,可用于从Android应用程序收集崩溃报告(对于那些对Android和ACRA感兴趣的人:https://github.com/marvinlabs/acra-server).

那些可以使用它的人可以简单地将该应用程序安装为常规的Symfony 2软件包,从GitHub获取并执行所需的所有命令行工作我希望人们能够非常简单地安装该应用程序而不需要:

  • 任何symfony的知识
  • 需要访问php composer
  • 需要输入任何php命令行

为此,我打包了一个包含整个Symfony代码+我的包的zip文件.问题:似乎找不到CSS和Javascripts,我仍然需要在服务器上运行命令:

php app/console assetic:dump --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)

问题1:我怎么能摆脱最后一步?

问题2:总的来说,在制作zip文件之前,你会在我的流程中添加什么?


在制作该zip文件之前,我就是这样做的:

  • 删除所有git文件夹
  • 删除我的app/config/parameters.yml文件(特定于我的开发环境)

我还执行以下命令:

php app/console cache:clear --env=dev
php app/console cache:clear --env=prod
php app/console doctrine:schema:create --env=dev --dump-sql > create-schema.sql
php app/console doctrine:schema:update --env=dev --dump-sql > update-schema.sql
php app/console assets:install --env=prod --no-debug
php app/console assetic:dump --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)

PS:


要为尝试排除故障的人安装说明:

  1. 下载http://www.vincentprat.info/tmp/acra-server-1.0.0.zip
  2. 上传服务器上的zip内容
  3. 将权限777授予目录app/logs和app/cache
  4. 从示例文件app/config/parameters.yml.dist创建文件app/config/parameters.yml
  5. 在create-schema.sql文件的帮助下创建数据库表
  6. 使您的(子)域指向acra-server/web目录
  7. 访问主页:http://www.example.com/dashboard

编辑12/06/2013

解压后立即列出文件和权限

~/acra-server/web$ ls -l css
total 10
-rw-r--r--+ 1 vincentp users 8990 May 23 18:26 d82d504.css

~/acra-server/web$ ls -l js
total 103
-rw-r--r--+ 1 vincentp users 104721 May 23 18:26 7cb568e.js
Run Code Online (Sandbox Code Playgroud)

在assetic dump命令之后列出文件和权限

:~/acra-server$ ls -l web/js
total 281
-rw-r--r--+ 1 vincentp users 205123 May 28 21:48 7cb568e.js
-rw-r--r--+ 1 vincentp users  21767 May 28 21:48 b96fe74.js
Run Code Online (Sandbox Code Playgroud)

我们可以看到已生成另一个JS文件(与CSS相同).我想Assetic并没有从解压缩中寻找合适的文件.有关如何纠正的任何想法?也许强迫资产使用给定的文件名?

Nic*_*ich 4

转储到给定文件名

( assetic 的输出选项)

您可以将资产集合配置为转储到给定的文件名。这可以通过输出选项在 twig 内部实现。不再自动生成文件名,例如7cb568e.js

例子:

{% stylesheets 
    'bundles/mlabsacraserver/stylesheets/*' 
    filter='cssrewrite'
    output='css/stylesheets.css'
%}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

...或javascript...

{% javascripts  
    'bundles/mlabsacraserver/js/jquery.min.js'
    'bundles/mlabsacraserver/js/*' 
    output='js/javascripts.js'
%}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}
Run Code Online (Sandbox Code Playgroud)

现在 assetic 将使用给定的过滤器将您的资源转储到js/javascripts.jscss/stylesheets.css

assetic 将转储这些资源的基本路径可以在 config.yml 中使用assetic.write_to和 defaults.to web/ 文件夹进行配置。

预配置的资产集合

您可以做得更好并使代码更加结构化。您可以在 config.yml (或另一个导入的配置文件)中定义资产集合。

配置可以在assetic.assets下找到

例子:

# app/config.yml

assetic:
    # ...
    assets:
        js_main:
            inputs:
                - "bundles/mlabsacraserver/js/jquery.min.js"
                - "bundles/mlabsacraserver/js/*"
            output: js/javascripts.js

        css_main:
            inputs:
                - "bundles/mlabsacraserver/stylesheets/*"   
            filters: 
                - cssrewrite                 # ...add more if you like
            output: css/stylesheets.css
Run Code Online (Sandbox Code Playgroud)

asset()现在,您可以使用 assetic 的函数和@带有相应集合名称的 - 语法在 twig 模板中使用这些集合。

例子:

<link href="{{ asset('@css_main') }}" type="text/css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

... 和 ...

<script src="{{ asset('@js_main') }}" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以配置 assetic 在何处查找您的 asset,使用单个配置参数更改名称,并将此逻辑保留在模板之外,从而使它们更具可读性且更易于维护。

结果输出示例:

 <link href="/web/css/stylesheets.css" type="text/css" rel="stylesheet" />
 <script src="/web/js/javascripts.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

现在,您的应用程序中有一个配置点,您可以在其中使用集合添加和删除资产,然后只需在模板中使用它们的引用名称。

部署的进一步改进

您可以让您的用户输入他们的 MySQL 主机、用户和密码,并让 symfony 为您写入参数文件。

这就是当您第一次访问应用程序时symfony 标准版使用SensioDistributionBundle所做的事情。

执行实际写入parameters.yml的类是Sensio\DistributionBundle\Configurator\Configurator

use Sensio\DistributionBundle\Configurator\Configurator;
Run Code Online (Sandbox Code Playgroud)

现在使用安装控制器中的配置器。

   $configurator = new Configurator($this->get('kernel')->getRootDir());

   $configurator->mergeParameters(array(
        'my_parameter' = 'my_value',
        'my_parameter2' = 'my_value2',
   ));

  $configurator->write();
}
Run Code Online (Sandbox Code Playgroud)

最好的办法是查看 Configurator 类本身以了解它是如何工作的。

我现在可以领取赏金吗?;-)