5

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

对此感到满意的人可以简单地将该应用程序安装为常规 Symfony 2 包,方法是从 GitHub 获取它并执行所有需要的命令行操作,我希望人们能够非常简单地安装该应用程序而无需:

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

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

php app/console assetic:dump --env=prod --no-debug

问题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

PS:


为那些想要尝试对其进行故障排除的人的安装说明:

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

编辑 2013 年 12 月 6 日

解压后的文件和权限列表

~/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

资产转储命令后的文件和权限列表

:~/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

我们可以看到已经生成了另一个 JS 文件(CSS 也是如此)。我猜 Assetic 并没有从解压缩文件中寻找正确的文件。关于如何纠正的任何想法?也许强制资产使用给定的文件名?

4

4 回答 4

4

转储到给定的文件名

assetic的输出选项

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

例子:

{% stylesheets 
    'bundles/mlabsacraserver/stylesheets/*' 
    filter='cssrewrite'
    output='css/stylesheets.css'
%}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}

...或javascripts ...

{% javascripts  
    'bundles/mlabsacraserver/js/jquery.min.js'
    'bundles/mlabsacraserver/js/*' 
    output='js/javascripts.js'
%}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

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

可以在您的 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

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

例子:

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

... 和 ...

<script src="{{ asset('@js_main') }}" type="text/javascript"></script>

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

示例结果输出:

 <link href="/web/css/stylesheets.css" type="text/css" rel="stylesheet" />
 <script src="/web/js/javascripts.js" type="text/javascript"></script>

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

部署的进一步改进

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

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

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

use Sensio\DistributionBundle\Configurator\Configurator;

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

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

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

  $configurator->write();
}

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

我现在可以拿赏金了吗?;-)

于 2013-06-13T09:32:53.160 回答
1

如果它对您不重要,则可能根本不使用资产并且不将所有资产文件合并为一个。您会失去所有功能,例如缩小、组合和其他功能。相反,您不再需要运行php app/console assetic:dump --env=prod --no-debug.

要做到这一点 - 运行php app/console assets:install web。它将所有资产复制到web/bundles文件夹。然后在base.html.twig模板中,您可以手动包含您的资产。

{% block stylesheets %}
    <link href="{{ asset('bundles/mlabsacraserverbundle/stylesheets/style.css') }}" rel="stylesheet" media="screen">
    ...
{% endblock %}

{% block javascripts %}
    <script src="{{ asset('bundles/mlabsacraserverbundle/js/jquery.min.js')}}"></script>
    ...
{% endblock %}

这是解决您的问题的最简单方法。


另一种方法是从 php 代码中调用命令,如此处文档此处的实时示例中所述。您可以创建一个安装页面,在其中运行此命令并安装资产。

于 2013-06-12T10:11:13.517 回答
0

html在说什么?您的资产路径是否正确生成?

我看到一个:“php app/console assets:install --env=prod --no-debug”

所以实际上css应该在那里。

也许你用你的网络目录尝试这个命令。将 CSS 从您的 Resources/Public 文件夹复制到您的 web/bundlename/...

“php 应用程序/控制台资产:安装网络”

还是一样?

于 2013-06-07T09:11:44.033 回答
0

抱歉,但是(我将再次谈论必须执行命令行)必须键入 7 个命令(下载/wget、unzip、chmod、cp、sql、config)如何比制作简单

composer create-project marvinlabs/acra-server --prefer-dist acra-server

如果您添加一些安装后脚本,您甚至可以自动配置 Web 服务器 / ...

例如,parametere.yml 的步骤已经由 symfony-standard ( https://github.com/Incenteev/ParameterHandler )中的 composer 脚本处理。

我强烈建议不要使用 zip 文件,但如果你愿意,这里有一些链接可以解决你的资产问题:

默认情况下,assetic总是生成唯一的文件名,因此每个转储都是另一个文件名。

于 2013-06-14T07:28:47.730 回答