TypeError {#12386
#message : "GeoIp2\WebService\Client::city(): Argument #1 ($ipAddress) must be of type string, null given, called in /home/usr-dev-adventcan/webapps/dev-adventurecanada-com/modules/adventurecanada/src/services/Geo.php on line 66 "
#code : 0
#file : "/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /geoip2/geoip2/ src/WebService/Client.php "
#line : 139
trace : {
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /geoip2/geoip2/ src/WebService/Client.php:139 {
GeoIp2\WebService \ Client->city(string $ipAddress = 'me'): City …
› */
› public function city(string $ipAddress = 'me'): City
› {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com / modules/adventurecanada/src/services/Geo.php:66 {
adventurecanada\services \ Geo->processGeo(): ?array …
›
› $record = $client->city( $userIP );
› $geo_data = [
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com / modules/adventurecanada/src/services/Geo.php:135 {
adventurecanada\services \ Geo->viewConsent(): bool …
› }
› $geoData = $this->processGeo();
› if($geoData){
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com / modules/adventurecanada/src/web/twig/variables/AdventureCanadaVariable.php:382 {
adventurecanada\web\twig\variables \ AdventureCanadaVariable->getGeoData(): bool …
›
› \t return AdventureCanada::getInstance()->geo->viewConsent();
› }
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Extension/CoreExtension.php:1918 {
Twig\Extension \ CoreExtension::getAttribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = Template::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) …
› try {
› $ret = $object->$method(...$arguments);
› } catch (\BadMethodCallException $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /craftcms/cms/ src/helpers/Template.php:156 {
craft\helpers \ Template::attribute(Environment $env, Source $source, mixed $object, mixed $item, array $arguments = [], string $type = Template::ANY_CALL, bool $isDefinedTest = false, bool $ignoreStrictCheck = false, bool $sandboxed = false, int $lineno = -1): mixed …
›
› return CoreExtension::getAttribute(
› $env,
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/templates/_layouts/base.twig:1 {
__TwigTemplate_a95b006ad7171033b36c5b811890202b->doDisplay(array $context, array $blocks = []): iterable …
›
› {% set showConsent = craft.adventureCanada.getGeoData() %}
› <!DOCTYPE html>
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Template.php:411 {
Twig \ Template->yield(array $context, array $blocks = []): iterable …
› $this->ensureSecurityChecked();
› yield from $this->doDisplay($context, $blocks);
› } catch (Error $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/storage/runtime/compiled_templates/6e/6e67f14b4aca23fb0bc638f532d9a56f.php:159 {
__TwigTemplate_0c6015a0d2729500516af6b9a5418074->doDisplay(array $context, array $blocks = []): iterable …
› $this->parent = $this->load("_layouts/base", 1);
› yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
› craft\helpers\Template::endProfile("template", "_pages/homepage/default");
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Template.php:411 {
Twig \ Template->yield(array $context, array $blocks = []): iterable …
› $this->ensureSecurityChecked();
› yield from $this->doDisplay($context, $blocks);
› } catch (Error $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/templates/index.twig:11 {
__TwigTemplate_db6be6c4116725783480f416d1c5dbd3->doDisplay(array $context, array $blocks = []): iterable …
› "_pages/" ~ entry.section.handle ~ "/" ~ entry.type.handle,
› "_pages/" ~ entry.section.handle ~ "/default",
› "_pages/default"
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Template.php:411 {
Twig \ Template->yield(array $context, array $blocks = []): iterable …
› $this->ensureSecurityChecked();
› yield from $this->doDisplay($context, $blocks);
› } catch (Error $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Template.php:366 {
Twig \ Template->display(array $context, array $blocks = []): void …
› {
› foreach ($this->yield($context, $blocks) as $data) {
› echo $data;
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Template.php:381 {
Twig \ Template->render(array $context): string …
› try {
› $this->display($context);
› } catch (\Throwable $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/TemplateWrapper.php:51 {
Twig \ TemplateWrapper->render(array $context = []): string …
› {
› return $this->template->render($context);
› }
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /twig/twig/ src/Environment.php:333 {
Twig \ Environment->render($name, array $context = []): string …
› {
› return $this->load($name)->render($context);
› }
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /craftcms/cms/ src/web/View.php:590 {
craft\web \ View->renderTemplate(string $template, array $variables = [], ?string $templateMode = null): string …
› try {
› $output = $this->getTwig()->render($template, $variables);
› } finally {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /craftcms/cms/ src/web/View.php:662 {
craft\web \ View->renderPageTemplate(string $template, array $variables = [], ?string $templateMode = null): string …
› $this->beginPage();
› echo $this->renderTemplate($template, $variables);
› $this->endPage();
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /craftcms/cms/ src/web/TemplateResponseFormatter.php:57 {
craft\web \ TemplateResponseFormatter->format($response) …
› try {
› $response->content = $view->renderPageTemplate($behavior->template, $behavior->variables, $behavior->templateMode);
› } catch (Throwable $e) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /yiisoft/yii2/ web/Response.php:1118 {
yii\web \ Response->prepare() …
› if ($formatter instanceof ResponseFormatterInterface) {
› $formatter->format($this);
› } else {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /craftcms/cms/ src/web/Response.php:358 {
craft\web \ Response->prepare(): void …
› {
› parent::prepare();
› $this->_isPrepared = true;
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /yiisoft/yii2/ web/Response.php:339 {
yii\web \ Response->send() …
› $this->trigger(self::EVENT_BEFORE_SEND);
› $this->prepare();
› $this->trigger(self::EVENT_AFTER_PREPARE);
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /yiisoft/yii2/ base/Application.php:388 {
yii\base \ Application->run() …
› $this->state = self::STATE_SENDING_RESPONSE;
› $response->send();
›
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /putyourlightson/craft-blitz/ src/drivers/generators/local-generator-script.php:104 {
{closure} …
› try {
› $success = $app->run() == 0;
› } catch (Throwable $exception) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /amphp/parallel/ src/Context/Internal/functions.php:69 {
Amp\Parallel\Context\Internal \ runContext(string $uri, string $key, Cancellation $connectCancellation, array $argv, Serializer $serializer = new NativeSerializer): void …
›
› $returnValue = $callable(new ContextChannel($ipcChannel));
› $result = new ExitSuccess($returnValue instanceof Future ? $returnValue->await() : $returnValue);
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:453 {
Revolt\EventLoop\Internal \ AbstractDriver->invokeMicrotasks(): void …
› // Clear $args to allow garbage collection
› $callback(...$args, ...($args = []));
› } catch (\Throwable $exception) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:595 {
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure} …
› do {
› $this->invokeMicrotasks();
›
}
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure}() {}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/DriverSuspension.php:65 {
Revolt\EventLoop\Internal\DriverSuspension::Revolt\EventLoop\Internal \ {closure} …
› if (!$fiber->isTerminated()) {
› $fiber->resume($value);
› }
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:453 {
Revolt\EventLoop\Internal \ AbstractDriver->invokeMicrotasks(): void …
› // Clear $args to allow garbage collection
› $callback(...$args, ...($args = []));
› } catch (\Throwable $exception) {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:648 {
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure} …
›
› $this->invokeMicrotasks();
› }
}
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure}() {}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:525 {
Revolt\EventLoop\Internal \ AbstractDriver->invokeCallbacks(): void …
› if ($this->callbackFiber->isSuspended()) {
› $yielded = $this->callbackFiber->resume();
› } else {
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:586 {
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure} …
› $this->tick($previousIdle);
› $this->invokeCallbacks();
› }
}
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure}() {}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:96 {
Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal \ {closure} …
›
› $result = $this->fiber->isStarted() ? $this->fiber->resume() : $this->fiber->start();
› if ($result) { // Null indicates the loop fiber terminated without suspending.
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop/Internal/AbstractDriver.php:117 {
Revolt\EventLoop\Internal \ AbstractDriver->run(): void …
›
› $lambda = ($this->runCallback)();
›
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /revolt/event-loop/ src/EventLoop.php:411 {
Revolt \ EventLoop::run(): void …
› {
› self::getDriver()->run();
› }
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /amphp/parallel/ src/Context/Internal/process-runner.php:92 {
Amp\Parallel\Context\Internal \ {closure} …
›
› EventLoop::run();
› })();
}
/home/usr-dev-adventcan/webapps/dev-adventurecanada-com/vendor /amphp/parallel/ src/Context/Internal/process-runner.php:93 {
› EventLoop::run();
› })();
›
}
}
}
Adventure Canada
Skip to Content
Where will your curiosity take you?
Adventure Canada creates intimate journeys for the curious on our small-ship expeditions.
How We Travel
An Adventure Canada journey connects you with the nature, cultures, and stories that define the places we explore, making every voyage a shared experience of discovery.
Designed for Deeper Discovery
We design journeys that immerse travellers in the ideas, emotions, and richness of place, creating meaningful connections with the landscapes, cultures, and stories we explore.
Learn From Those Who Live It
Meet Indigenous leaders, artists, and local experts who share their culture, history, and traditions firsthand, offering personal perspectives that deepen your understanding of the places we explore.
Rooted in Canada. Open to the World.
Our journeys reflect Canadian values of inclusion, curiosity, and shared understanding, creating a welcoming space for travellers to learn from one another and the places we explore.
Travel With Respect
Every journey is guided by care for the communities, cultures, and natural environments we explore, ensuring travel that honours both place and people.
Storytellers On Board, Every Voyage
Scientists, historians, artists, and naturalists travel alongside you, turning every expedition into a shared experience of curiosity and discovery.
Meet Our Storytellers
Journeys Worth Discovering
If you’ve ever been curious about visiting the places that have shaped nature, culture, and stories, a journey with Adventure Canada brings them to life.
Small-Ship Expedition Cruise
From $18,495
to
$36,495
USD
per person based on double occupancy
Small-Ship Expedition Cruise
From $18,495
to
$36,495
USD
per person based on double occupancy
Small-Ship Expedition Cruise
From $13,595
to
$23,995
USD
per person based on double occupancy
Save 25% on Northwest Passage Journeys
Limited Space Available. Book by May 15, 2026. Applies to berth cost only.
Explore Our Journeys
See Where Curiosity Can Take You
Download our brochure and explore what awaits.
Download
Our Travellers Share Their Stories
“Everything about Adventure Canada is superlative. This “circling the midnight sun” expedition overflows with fantastic scenery, icebergs, fjords, and Inuit cultural enlightenment.”
-
Jean G
Baffin Island and Greenland: Circling the Midnight Sun
“Excellent expedition style cruise with active experiences and great, knowledgeable staff. Food was also superb. Staff was approachable and flexible.”
-
Peter W
Newfoundland Circumnavigation
“We have traveled globally for decades, including to Antarctica and Arctic Svalbard, and this expedition trip with Adventure Canada was one of our best ever! Greenland fjords, glaciers and icebergs were majestic and our visit in the capital, Nuuk, fascinating.”
-
Tee T
Greenland & Wild Labrador: A Torngat Mountains Adventure
The Community Experience: By Shari
Northwest Passage Expedition
The Road Less Travelled: Patricia McPhail
Scotland, the Faroe Islands, and Iceland: North Atlantic Saga Trip
Explore Our Current Promotions
View our latest offers and limited-time savings on upcoming
Adventure Canada journeys.
Explore Our Promotions
Small Ships, Deeper Access
Travel to places few ever reach, in the company of fewer than
200 like-minded adventurers.
See Our Ships
Plan Your Journey With Us
Our Adventure Specialists can provide thoughtful guidance to help you choose the right journey.
Top