我有一个使用Fuelphp 1.6.3用PHP编写的应用程序,并希望在Openshift上部署它
由于框架需要编辑器,当我在http://audit-manhthang.rhcloud.com/public/访问我的应用时,它显示错误
未安装Composer。请运行“php composer.phar update” 安装Composer的根
我有Google,并在此处找到了一篇文章:https://www.openshift.com/content/support-for-git-clone-on-the-server-aka-support-php-composerphar
我已尝试按照说明操作,在.openshift/action_hooks
文件夹中创建文件名deploy并添加以下内容:
unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar install
但它不起作用。我试图通过install
update
unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar update
但没有变化。 我在Openshift上使用PHP 5.3 Cartridge
答案 0 :(得分:4)
当我做作曲家更新时
cd app-root/runtime/repo/php
/usr/bin/php composer.phar update
我收到了这样的错误
[RuntimeException]
/var/lib/openshift/52d3b7bd500446f4300001a5/.composer/cache/vcs does not exist and could not be created.
Composer is using $HOME variable找到根路径。所以要解决我的问题。
export HOME=/var/lib/openshift/52d3b7bd500446f4300001a5/app-root/runtime/repo/php
然后
/usr/bin/php composer.phar update
的工作。
更新完成后,我还原了$ HOME
export HOME=/var/lib/openshift/52d3b7bd500446f4300001a5
看起来openhift现在有些变化。我知道这是一个非常丑陋的解决方法。如果我能找到更好的东西,我会更新这个答案。不过,希望这会对某人有所帮助。
修改强>
知道了! :)
在.openshift目录下创建新文件:
.openshift/action_hooks/deploy
并将其标记为可执行文件。
#!/bin/bash
# Run composer install
cd app-root/runtime/repo/php
export HOME_ORIGIN=$HOME
export HOME=$HOME/app-root/runtime/repo/php
/usr/bin/php composer.phar install
export HOME=$HOME_ORIGIN
之后,每个推送作曲家都会更新到当前的composer.lock位置。完善! :)
还要确保供应商/路径为空。最好添加.gitignore,这样就不会被你的本地设置搞砸了。
答案 1 :(得分:2)
这是一个比其他人提到的更好的解决方案: http://stanlemon.net/2013/03/22/composer-on-openshift/
博文中提到的部署脚本:
一个。下载composer(如果不存在)并将其存储在数据目录中以便它保持不变
穿过git推动
湾使composer能够使用存储在持久数据目录中的.composer目录中的缓存版本的包,从而减少频繁推送时所需的时间
脚本存在一个小问题 - 它所指的php版本被作曲家抱怨太老了
remote: #!/usr/bin/env php
remote: Some settings on your machine may cause stability issues with Composer.
remote: If you encounter issues, try to change the following:
remote:
remote: Your PHP (5.3.3) is quite old, upgrading to PHP 5.3.4 or higher is recommended.
remote: Composer works with 5.3.2+ for most people, but there might be edge case issues.
所以我改变了使用系统上最新礼物的路径
[domain.rhcloud.com action_hooks]\> php --version
PHP 5.4.16 (cli) (built: Dec 6 2013 01:17:01)
[domain.rhcloud.com 5316aa83e0b8cdb61b00023a]\> which php
/opt/rh/php54/root/usr/bin/php
我的.openshift / action_hooks / deploy中的脚本是
#!/bin/bash
# Run composer install
cd app-root/runtime/repo/
export COMPOSER_HOME="$OPENSHIFT_DATA_DIR/.composer"
if [ ! -f "$OPENSHIFT_DATA_DIR/composer.phar" ]; then
curl -s https://getcomposer.org/installer | /opt/rh/php54/root/usr/bin/php -- --install-dir=$OPENSHIFT_DATA_DIR
else
/opt/rh/php54/root/usr/bin/php $OPENSHIFT_DATA_DIR/composer.phar self-update
fi
( unset GIT_DIR ; cd $OPENSHIFT_REPO_DIR ; /opt/rh/php54/root/usr/bin/php $OPENSHIFT_DATA_DIR/composer.phar install )
正如博客文章建议的那样 - 在markers子目录中创建一个空的hot_deploy文件,通过说在推送期间不应该重新启动服务器来进一步加快速度 -
touch .openshift/markers/hot_deploy
git add .openshift/markers/hot_deploy
git add .openshift/action_hooks/deploy
git commit -m "Speeding up composer installs across pushes"
git push origin master
即使使用作曲家,也要注意你的git推得快。
答案 2 :(得分:1)
我明白了。使用openshift,我可以通过SSH访问并转到app-root(or something like that)/repo/php
,然后键入/usr/bin/php composer.phar update
。就是这样。
答案 3 :(得分:1)
作为参考,OpenShift内置了对Composer的支持。在OpenShift项目的use_composer
目录中添加use_composer
marker file,只是一个名为.openshift/markers
的空文件,将自动启用部署时的Composer安装/更新。
更具体地说,每次git push
到您的OpenShift git repo ...
进入'生产'模式(默认):
echo -n "Checking composer.json for Composer dependency... "
if [ -f ${OPENSHIFT_REPO_DIR}composer.json ]; then
echo
composer install --no-interaction --no-ansi --no-scripts --optimize-autoloader --working-dir=${OPENSHIFT_REPO_DIR} || \
echo -e "\nSkipping Composer errors..\n\n Please, fix the errors either locally or in development mode.\n"
if [ ! -f ${OPENSHIFT_REPO_DIR}composer.lock ]; then
echo -e $composer_lock_msg
fi
else
echo "File not found."
fi
进入'开发'模式:
if [ -f ${OPENSHIFT_REPO_DIR}composer.lock ]; then
echo "Ignoring composer.lock file (development mode)"
fi
echo -n "Checking composer.json for Composer dependency... "
if [ -f ${OPENSHIFT_REPO_DIR}composer.json ]; then
echo
composer update --no-interaction --no-ansi --no-scripts --optimize-autoloader --working-dir=${OPENSHIFT_REPO_DIR}
echo -e $composer_lock_msg
else
echo "File not found."
fi
查看从line #142 of the OpenShift PHP Cartridge开始的代码。
查看enabling PHP 'development' mode上的Developer Portal文章了解更多详情。
查看Laravel 5 QuickStart示例使用或简单的入门方法。
答案 4 :(得分:0)
我没有足够的观点对wormhit's的答案发表评论,所以我会在此处附上:
zend / php - * / etc / php.ini 文件需要更新OpenShift以使用最新版本的composer.phar作为described here:
extension=phar.so
extension=ctype.so
添加这些扩展可修复PHP对composer.phar
的抱怨
使用相对路径需要下一个修复:
php composer.phar install
绝对路径的INSTEAD:
/usr/bin/php composer.phar install
允许加载扩展程序。