TH1981
TH1981

Reputation: 3193

Laravel 4.1 setting multiple environments for both web & terminal

Okay, I get the multi-environments from the Laravel Docs.

Here's my setup:

The local environment has a different hostname from the production server obviously, however the staging server is a subdomain on the production server (so dev.myapp.com vs myapp.com). I also use myapp.dev as my virtual hostname locally.

I've set the following to switch the enviornments:

$env = $app->detectEnvironment(function(){

if(strpos($_SERVER['HTTP_HOST'],'.dev') !== false) || strpos($_SERVER['HTTP_HOST'],'dev.') !== false) {
    return 'local';
}
return 'production';

});

This almost works. The problem is I have a separate database setup for my dev/staging environments so that we're not showing or manipulating live data on the staging environment. This falls down in terminal. When I run php artisan env (after a warning message about $_SERVER['HTTP_HOST'] not being set) it shows as production.

That means it won't run migrations on the correct database through terminal.

What's a better way to reference this?

Upvotes: 1

Views: 514

Answers (2)

Jarek Tkaczyk
Jarek Tkaczyk

Reputation: 81127

php artisan --env=staging

is what you need, and add isset($_SERVER['HTTP_HOST']) to the detection code, otherwise cli will complain.

Upvotes: 3

Keith Mifsud
Keith Mifsud

Reputation: 1618

Not sure if you've tried this but I would use the hostname instead of the domain. In your staging server using your CLI type hostname and it will tell you the hostname of your server.

You can add this to bootstrap/start.php

$env = $app->detectEnvironment(array(

    'local' => array('homestead'), // Change this to your local machine hostname.
    'staging' => array('staging_hostame'), // staging server
    'production' => array('your-production-machine-name'),

));

Let me now if you need further help on this :)

Upvotes: -1

Related Questions