我最近将我的Laravel API部署到AWS ElasticBeanStalk。
我想测试API是否正在运行,所以我做了一个简单的路由来返回一条消息。在本地,它工作正常:
输出:Welcome
但是在AWS上,我得到了:
http://my-api.elasticbeanstalk.com/
输出:Whoops, looks like something went wrong.
(输出两次)
这是一个500错误,没有太多其他有用的信息。
我打开调试模式并得到:
RuntimeException in EncryptionServiceProvider.php line 29:
No supported encrypter found. The cipher and / or key length are invalid.
查找此错误并找到this,其中说我将config\app.php
密码更改为:
'cipher' => 'AES-256-CBC',
但它已经是那个价值了。
然后它说确保.env APP_KEY
是32位,我的是。
localhost和aws应用程序之间的请求标头看起来类似。存在差异,但我认为没有任何差异会返回500.我通过SSH连接到AWS EC2以验证路由是否相同。
路线:
Route::group(['middleware' => 'cors'], function(Router $router) {
Route::get('/', function () {
return 'Welcome';
});
class EncryptionServiceProvider extends ServiceProvider
{
Encryption Service Provider:
public function register()
{
$this->app->singleton('encrypter', function ($app) {
$config = $app->make('config')->get('app');
$key = $config['key'];
$cipher = $config['cipher'];
if (Encrypter::supported($key, $cipher)) {
return new Encrypter($key, $cipher);
} elseif (McryptEncrypter::supported($key, $cipher)) {
return new McryptEncrypter($key, $cipher);
} else {
throw new RuntimeException('No supported encrypter found. The cipher and / or key length are invalid.');
}
});
}
答案 0 :(得分:0)
糟糕,忘了将ENV vars添加到AWS app实例。
1)转到app-> configuration |>软件配置
2)在您的本地.env
添加环境变量并指定生产的唯一值
3)验证ENV vars是通过SSH连接到服务器,然后cd /opt/elasticbeanstalk/support
并运行cat envvars
在EC2上注册的。应列出ENV变量。
4)然后用source envvars
5)输出ENV vars以验证它们是否已在应用程序中设置:echo env $APP_KEY
将吐出已设置的ENV