将Laravel部署到Heroku时,环境保持本地状态

时间:2018-03-07 22:40:47

标签: laravel-5

我试图在Laravel 5中设置开发+生产环境,但是当我检查当前环境时 - 我在两种情况下都获得了本地...当我在本地工作时以及当我部署到Heroku时... < / p>

我想创建2个环境,以便从https顺利切换到http ...

这是AppServiceProvider.php文件......

from django.shortcuts import render
from django.views.generic.edit import FormView
from contacts.forms import ContactForm
from django.views.generic import TemplateView
from exchangelib import *
from exchangelib.items import *

class ContactRequestView(FormView):
    template_name = 'contact_form.html'
    form_class = ContactForm
    success_url = '/contact/thanks/'


    def form_valid(self, form):
        credentials = Credentials(
           username='simplesol.com\\jbobst',
           password='password'
       )
        account = Account(
            primary_smtp_address='jbobst@simplesol.com',
            credentials=credentials,
            autodiscover=True,
            access_type=DELEGATE
            )
        audit_request = ''
        for k in form.cleaned_data:
            audit_request += k + ' = ' + form.cleaned_data[k] + '\n'

        m = Message(
            account=account,
            subject='You have a new site audit request',
            body= audit_request,
            to_recipients=
    ['sales@simplesol.com','scheduling@simplesol.com'],
        )

        m.send_and_save()

        form.save()
        return super().form_valid(form)



class ContactThanksView(TemplateView):
    template_name = 'contact_thanks.html'

这是.env文件

<?php

        namespace App\Providers;
        use App;
        use Illuminate\Support\ServiceProvider;

        class AppServiceProvider extends ServiceProvider
        {

            public function boot()
            {
                $environment = App::environment();
                echo '<pre>';
                print_r($environment); // prints Local - always
                echo '</pre>';
                die();
                if (App::environment('production', 'staging'))
                {
                    \URL::forceSchema('https');
                }
                else
                {
                    echo "environment=", App::environment(), "\n";
                }
            }

            public function register()
            {
                //
            }
        }

1 个答案:

答案 0 :(得分:0)

您需要更改Heroku服务器上的.env文件,以反映其生产情况。您应该将APP_ENV=local保留在本地开发计算机上,但将其更改为实时服务器上的APP_ENV=production和临时服务器上的APP_ENV=staging

编辑:

在本地服务器的根目录中,您必须有一个.env文件,其中包含APP_ENV=local(其余文件可以保留在您的问题中)。在生产服务器上,您必须具有相同的.env文件,但将APP_ENV=local更改为APP_ENV=production,并根据需要编辑数据库连接数据。您不需要任何其他文件/文件夹,.env文件特定于环境

然后这段代码可以正常工作(看看我的评论)

$environment = App::environment();
echo '<pre>';
    print_r($environment); // prints Local - always - but this won't when you have the 2 differing environment files
echo '</pre>';
die();

if (App::environment('production', 'staging'))
{
    \URL::forceSchema('https');
}
else
{
    echo "environment=", App::environment(), "\n";
}

因为每个服务器上都有单独的 .env文件。它们意味着要在存储库中提交,它们必须不同并且位于项目的根目录中。