在 Heroku 上部署 Facebook 应用程序
Deploying Fb app on Heroku
我是 Heroku 的新手。有时我一直在尝试在 Heroku 上为 Facebook 部署一个应用程序,但没有看到成功。我试过在互联网上搜索解决方案,但没有找到任何分步指南,所以我在这里问一下。
我的 Fb 应用代码 "index.php"
<?php
session_start();
require_once __DIR__ . '/fbsdk/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => '************',
'app_secret' => '**********',
'default_graph_version' => 'v2.4',]);
$helper = $fb->getCanvasHelper();
$permissions = ['email'];
try {
if (isset($_SESSION['facebook_access_token'])) {
$accessToken = $_SESSION['facebook_access_token'];
} else {
$accessToken = $helper->getAccessToken();
}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
if (isset($accessToken)) {
if (isset($_SESSION['facebook_access_token'])) {
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
} else {
$_SESSION['facebook_access_token'] = (string) $accessToken;
$oAuth2Client = $fb->getOAuth2Client();
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
try {
$request = $fb->get('/me');
} catch(Facebook\Exceptions\FacebookResponseException $e) {
if ($e->getCode() == 190) {
unset($_SESSION['facebook_access_token']);
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
exit;
}
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
try {
$requestPicture = $fb->get('/me/picture?redirect=false&height=300');
$requestProfile = $fb->get('/me');
$picture = $requestPicture->getGraphUser();
$profile = $requestProfile->getGraphUser();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
echo "<img src='".$picture['url']."'/>";
} else {
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/');
echo "<script>window.top.location.href='".$loginUrl."'</script>";
}
"composer.json"
{}
我在 Git Bash
上使用的命令
heroku create AppName
mkdir AppName
cd AppName
git init
git add .
git commit -m "comment"
heroku git:remote -a AppName
git push heroku master
git branch
git commit -am "comment"
git push heroku master
一切顺利,heroku 编译 PHP 文件,部署文件。但是当我直接打开 Fb 应用程序甚至 heroku 应用程序地址时,它会显示一条 **403 Forbidden" 消息 fbapp-2.herokuapp.com
目录结构
Buildpacks 设置为 heroku/php
我没有 procfile 或 .htaccess 文件
heroku 日志显示
State changed from starting to up
2016-04-05T15:30:14.413923+00:00 heroku[router]: at=info method=GET path="/" host=fbapp-2.herokuapp.com request_id=ea94baf1-a433-4631-bbe5-7493cb7e137f wd="43.230.135.148" dyno=web.1 connect=0ms service=3ms status=403 bytes=373
2016-04-05T15:30:14.399879+00:00 app[web.1]: [Tue Apr 05 15:30:14.395964 2016] [autoindex:error] [pid 82:tid 139840075028224] [client 1.3.2.3:58066] AH01276: Cannot serve directory /app/: No matching DirectoryIndex (index.php,index.html,index.htm) found, and server-generated directory index forbidden by Options directive
2016-04-05T15:30:14.400023+00:00 app[web.1]: 1.3.2.3 - - [05/Apr/2016:15:30:14 +0000] "GET / HTTP/1.1" 403 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46
2016-04-05T15:30:14.873648+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=fbapp-2.herokuapp.com request_id=8b65b3b6-2f82-4ab4-abb4-d4849c1ec225 fwd="43.230.135.148" dyno=web.1 connect=0ms service=1ms status=404 bytes=373
2016-04-05T15:30:14.856297+00:00 app[web.1]: 1.3.2.3 - - [05/Apr/2016:15:30:14 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "http://fbapp-2.herokuapp.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46
您收到的错误日志表明您的应用程序不在 Heroku 服务器上的 /app 目录中,并且该目录中没有任何内容可供使用。尝试将您的整个应用程序从 Web 根目录转移到 /app 目录,看看进展如何,应该可以解决您的问题,如果没有回复更新的错误日志。
所以,正如我从错误中了解到的那样,您尝试访问的目录中没有任何索引文件,并且目录列表被禁用,所以最后您会收到 403
错误。
我建议尝试在要访问文件的目录中创建 .htaccess
:
Options +Indexes
在此位置启用目录列表。
日志告诉您 Heroku 的 Apache 在 /app
文件夹中找不到索引文件。
将 fbapp-2
的内容移到 /app
中,当您使用 composer 时,您可以通过将此添加到您的 composer 配置来确保 apache 具有正确的权限:
"scripts": { "post-install-cmd": [ "chmod -R 755 app/" ] }
我是 Heroku 的新手。有时我一直在尝试在 Heroku 上为 Facebook 部署一个应用程序,但没有看到成功。我试过在互联网上搜索解决方案,但没有找到任何分步指南,所以我在这里问一下。
我的 Fb 应用代码 "index.php"
<?php
session_start();
require_once __DIR__ . '/fbsdk/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => '************',
'app_secret' => '**********',
'default_graph_version' => 'v2.4',]);
$helper = $fb->getCanvasHelper();
$permissions = ['email'];
try {
if (isset($_SESSION['facebook_access_token'])) {
$accessToken = $_SESSION['facebook_access_token'];
} else {
$accessToken = $helper->getAccessToken();
}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
if (isset($accessToken)) {
if (isset($_SESSION['facebook_access_token'])) {
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
} else {
$_SESSION['facebook_access_token'] = (string) $accessToken;
$oAuth2Client = $fb->getOAuth2Client();
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
try {
$request = $fb->get('/me');
} catch(Facebook\Exceptions\FacebookResponseException $e) {
if ($e->getCode() == 190) {
unset($_SESSION['facebook_access_token']);
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
exit;
}
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
try {
$requestPicture = $fb->get('/me/picture?redirect=false&height=300');
$requestProfile = $fb->get('/me');
$picture = $requestPicture->getGraphUser();
$profile = $requestProfile->getGraphUser();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
} catch(Facebook\Exceptions\FacebookSDKException $e) {
}
echo "<img src='".$picture['url']."'/>";
} else {
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/');
echo "<script>window.top.location.href='".$loginUrl."'</script>";
}
"composer.json"
{}
我在 Git Bash
上使用的命令heroku create AppName
mkdir AppName
cd AppName
git init
git add .
git commit -m "comment"
heroku git:remote -a AppName
git push heroku master
git branch
git commit -am "comment"
git push heroku master
一切顺利,heroku 编译 PHP 文件,部署文件。但是当我直接打开 Fb 应用程序甚至 heroku 应用程序地址时,它会显示一条 **403 Forbidden" 消息 fbapp-2.herokuapp.com
目录结构
Buildpacks 设置为 heroku/php
我没有 procfile 或 .htaccess 文件
heroku 日志显示
State changed from starting to up
2016-04-05T15:30:14.413923+00:00 heroku[router]: at=info method=GET path="/" host=fbapp-2.herokuapp.com request_id=ea94baf1-a433-4631-bbe5-7493cb7e137f wd="43.230.135.148" dyno=web.1 connect=0ms service=3ms status=403 bytes=373
2016-04-05T15:30:14.399879+00:00 app[web.1]: [Tue Apr 05 15:30:14.395964 2016] [autoindex:error] [pid 82:tid 139840075028224] [client 1.3.2.3:58066] AH01276: Cannot serve directory /app/: No matching DirectoryIndex (index.php,index.html,index.htm) found, and server-generated directory index forbidden by Options directive
2016-04-05T15:30:14.400023+00:00 app[web.1]: 1.3.2.3 - - [05/Apr/2016:15:30:14 +0000] "GET / HTTP/1.1" 403 209 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46
2016-04-05T15:30:14.873648+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=fbapp-2.herokuapp.com request_id=8b65b3b6-2f82-4ab4-abb4-d4849c1ec225 fwd="43.230.135.148" dyno=web.1 connect=0ms service=1ms status=404 bytes=373
2016-04-05T15:30:14.856297+00:00 app[web.1]: 1.3.2.3 - - [05/Apr/2016:15:30:14 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "http://fbapp-2.herokuapp.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46
您收到的错误日志表明您的应用程序不在 Heroku 服务器上的 /app 目录中,并且该目录中没有任何内容可供使用。尝试将您的整个应用程序从 Web 根目录转移到 /app 目录,看看进展如何,应该可以解决您的问题,如果没有回复更新的错误日志。
所以,正如我从错误中了解到的那样,您尝试访问的目录中没有任何索引文件,并且目录列表被禁用,所以最后您会收到 403
错误。
我建议尝试在要访问文件的目录中创建 .htaccess
:
Options +Indexes
在此位置启用目录列表。
日志告诉您 Heroku 的 Apache 在 /app
文件夹中找不到索引文件。
将 fbapp-2
的内容移到 /app
中,当您使用 composer 时,您可以通过将此添加到您的 composer 配置来确保 apache 具有正确的权限:
"scripts": { "post-install-cmd": [ "chmod -R 755 app/" ] }