我的生产服务器上有一个问题,assetic:dump即在Capifony部署上超时(但并非总是如此).
assetic:dump在当地跑步很好.另外,部署到不同的staging(功能更弱)服务器也没问题.
为了解决这个问题(以及加速部署),我想知道是否可以assetic:dump在部署之前运行并且只是将这些已编译的资产与其余部署一起发送?
我有一个运行Capistrano部署的Jenkins构建作为后构建操作.
从控制台运行Capkinsrano任务作为Jenkins用户工作非常正常,没有密码提示(我之前在构建和登台服务器上都设置了SSH密钥).但是,当通过Jenkins运行相同的脚本时,我突然收到密码提示,然后构建失败(没有TTY存在).
[workspace] $ /bin/sh -xe /tmp/hudson7321493219694918714.sh
Performing Post build task...
Match found for : : True
Logical operation result is TRUE
Running script : cap _2.13.4_ deploy
[workspace] $ /bin/sh -xe /tmp/hudson1545664641721322948.sh
+ cap _2.13.4_ deploy
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
triggering before callbacks for `deploy:update_code'
[32m--> Updating code base with checkout strategy[0m
executing locally: "git ls-remote git@my.staging-server.com:my_project.git master"
command finished in 1200ms
* executing "git clone -q git@my.staging-server.com:my_project.git /var/www/staging/my_project/releases/20121029223619 && cd …Run Code Online (Sandbox Code Playgroud) 我正在使用Capifony部署我的Symfony应用程序.当Capifony执行assetic时:dump我得到一个运行时异常.
[RuntimeException]
无法写入文件{path}/releases/20130314071536/app /../ web/js /.
我尝试手动执行命令并获得相同的异常.
然后我使用--verbose参数尝试了该命令,并意识到所有文件的源路径都有一个点,其中没有文件名,只有扩展名.点击没有扩展名的文件名(在这种情况下为Makefile)并尝试写入文件"."时出现异常.(只有一个点).
在同一服务器上的另一个域上,我有完全相同的代码,但手动部署.在那里我没有得到这个错误.所以它不是PHP版本的问题.我还检查了Assetic和Assetic-Bundle版本,它们是相同的.
资产工作的原因可能是什么?
编辑:
我忘了提到它在我的开发机器上也能正常工作.
编辑2:
它开始失败的文件
编辑3:
我刚刚意识到它适用于开发环境......但是对于--env = prod它会产生问题
网络/包/资产/资产/图像/图标/ aws.png
我没有在任何模板中使用的文件
Stacktrace来自错误
Exception trace:
() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:249
Symfony\Bundle\AsseticBundle\Command\DumpCommand->doDump() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:187
Symfony\Bundle\AsseticBundle\Command\DumpCommand->dumpAsset() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:64
Symfony\Bundle\AsseticBundle\Command\DumpCommand->execute() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:238
Symfony\Component\Console\Command\Command->run() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:192
Symfony\Component\Console\Application->doRun() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:78
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:105
Symfony\Component\Console\Application->run() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/app/console:33
Run Code Online (Sandbox Code Playgroud)
config.yml
# Twig Configuration
twig:
debug: %kernel.debug%
strict_variables: %kernel.debug%
form:
resources: [HomeBundle:Form:fields.html.twig]
# Assetic Configuration
assetic:
write_to: "%kernel.root_dir%/../web"
debug: %kernel.debug%
use_controller: false
bundles: ['YanicSecurityBundle','HomeBundle','UsersBundle','CmsBundle','AssetsBundle','FormBundle','TranslationBundle','EventBundle','ShopBundle','NewsletterBundle','IssueBundle','ProjectBundle']
filters:
cssrewrite: ~
Run Code Online (Sandbox Code Playgroud)
编辑4:
当搜索aws.png(第一个被破坏的结果)时,缓存文件中有2个结果:
/Applications/MAMP/htdocs/symfony-standard-2.1/app/cache/dev/appDevUrlGenerator.php:
112 '_assetic_e4d7f8d' …Run Code Online (Sandbox Code Playgroud) 调用时我的部署失败:
cd /var/www/prod/releases/20130513164742 && php app/console assetic:dump --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)
我的设置工作正常,但今天我无法使用cap deploy我在prod环境中克隆repo并执行php app/console assetic:dump --env=prod --no-debug(在开发模式下)检查的命令来部署它,它工作正常!
任何的想法 ?
** [out :: prod] executing "sh -c 'cd /var/www/prod/releases/20130513164742 && php app/console assetic:dump --env=prod --no-debug'"
** [out :: prod] PHP Deprecated: getEntityManager is deprecated since Symfony 2.1. Use getManager instead in /var/www/prod/shared/vendor/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle/Registry.php on line 71
** [out :: prod] Dumping all prod assets.
** [out :: prod] Debug mode is off.
** [out :: prod]
** [out :: prod] …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置Capistrano,以便它适用于我们的服务器设置.我们正在部署symfony项目,所以我也使用capifony.我仍然遇到一些权限问题.
在我们的服务器上,每个项目都以项目用户身份运行,因此每个项目都有自己的用户.所以我配置了use_sudo并将其设置为true,我将admin_runner配置为项目的用户.但它仍然没有用,所以我修改了capifony以开始使用try_sudo而不是常规运行.这使它的工作更好一些.但我对在这种情况下使用什么感到困惑.你有try_sudo,sudo和run.但哪个用例需要哪个?
现在我的问题是deploy:symlink方法这也只是一个常规的运行命令,所以它作为本地用户执行,当我尝试查看网站时,它会给出权限问题.
所以有人能告诉我,如果我对3个命令的描述是正确的吗?还有谁知道如何使用admin_runner和use_sudo,以便正确完成符号链接(以及capistrano完成的所有其他命令)?
亲切的问候,
大安
昨天我在服务器上进行了第40或第50次Symfony2系统的部署.到目前为止一切都很好.今天我收到了一个令人讨厌的错误.这是发生的事情:
* executing `symfony:cache:warmup'
* executing "cd /NFS2/oa_sf2/releases/20111214182506 && php app/console cache:warmup --env=prod"
servers: ["151.1.111.19"]
[151.1.111.19] executing command
** [out :: 151.1.111.19] Warming up the cache
** [out :: 151.1.111.19]
** [out :: 151.1.111.19]
** [out :: 151.1.111.19]
** [out :: 151.1.111.19] [RuntimeException]
** [out :: 151.1.111.19] Error creating output file.
** [out :: 151.1.111.19]
** [out :: 151.1.111.19]
** [out :: 151.1.111.19]
** [out :: 151.1.111.19] cache:warmup
** [out :: 151.1.111.19]
** [out :: 151.1.111.19]
command finished
*** [deploy:update_code] …Run Code Online (Sandbox Code Playgroud) 我们目前正在使用 Capifony 和ec2-capify插件将我们的代码滚动部署到 ELB 后面的一组实例。我们还使用 CloudFront 来管理静态资产,我们使用查询字符串(例如?v1 或?v2)对其进行版本控制。
我们偶然发现了一个有关更新资产版本的罕见问题。如果当前版本是 v1,并且我们每次对一台服务器进行 v2 的滚动部署,那么 v2 盒子上的请求可能会发生以下情况:
我们当前的解决方案是我们必须使用新的资产版本进行另一次部署。
有没有办法强制 Cloudfront 通过 ELB 仅访问我们更新的 (v2) 服务器之一,并忽略 v1 的服务器?
或者我是否缺少可以解决问题的替代解决方案?
cap database:move:to_remote例如,当我调用任何Capifony数据库函数时,我收到以下ruby错误:
jeremykendall@isr-thinkpad-420s:~/dev/sites/app$ cap develop database:move:to_remote
triggering load callbacks
* executing `develop'
triggering start callbacks for `database:move:to_remote'
* executing `multistage:ensure'
* executing `database:move:to_remote'
* executing `database:dump:local'
/home/jeremykendall/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- FileUtils (LoadError)
from /home/jeremykendall/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capifony-2.1.5/lib/symfony2.rb:101:in `block (3 levels) in load'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/execution.rb:139:in `instance_eval'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/execution.rb:139:in `invoke_task_directly'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/callbacks.rb:25:in `invoke_task_directly_with_callbacks'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/execution.rb:89:in `execute_task'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/namespaces.rb:191:in `method_missing'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/namespaces.rb:191:in `method_missing'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/namespaces.rb:110:in `block in define_task'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capifony-2.1.5/lib/symfony2.rb:159:in `block (3 levels) in load'
from /home/jeremykendall/.rvm/gems/ruby-1.9.3-p125@interperf/gems/capistrano-2.11.2/lib/capistrano/configuration/execution.rb:139:in `instance_eval'
from …Run Code Online (Sandbox Code Playgroud) 我已将我的Symfony2项目部署到我的开发服务器,并希望运行开发环境.
如果我使用/app.php,一切运行正常,但如果我尝试app_dev.php,我会收到404错误:
在此服务器上找不到请求的URL /app_dev.php.
下面是我的.htaccess文件的副本:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Explicitly disable rewriting for front controllers
RewriteRule ^app_dev.php - [L]
RewriteRule ^app.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
# Change below before deploying to production
#RewriteRule ^(.*)$ app.php [QSA,L]
RewriteRule ^(.*)$ app_dev.php [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
它在我的本地机器上工作正常,而不是在我的开发服务器上,任何想法为什么?
我的/ cache和/ logs目录都具有777权限,并由www-data拥有:
drwxrwxrwx+ 4 www-data www-data 4096 Mar 15 11:46 cache
drwxrwxrwx+ 2 www-data www-data 4096 Mar 15 11:05 logs
Run Code Online (Sandbox Code Playgroud)
这些目录中的dev和prod完全相同.
我已经将我的Symfony2网站部署到外部开发服务器,但它没有从我的github存储库中提取app_dev.php文件.app.php已被拉,我可以从那里访问该网站,但如果我去/app_dev.php我得到404找不到,因为该文件在服务器上不存在.该文件肯定在我的github存储库中,但不在我的.gitignore文件中.
capifony ×10
symfony ×7
deployment ×5
capistrano ×4
assetic ×3
php ×2
amazon-ec2 ×1
caching ×1
jenkins ×1
permissions ×1
ruby ×1
rvm ×1
ssh ×1
ssh-keys ×1
symfony-2.1 ×1