<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Valbuena</title>
    <description>The latest articles on DEV Community by David Valbuena (@davidv99).</description>
    <link>https://dev.to/davidv99</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F233162%2F1f70b58c-5913-4f2a-a33e-e0a8bc0258b5.jpeg</url>
      <title>DEV Community: David Valbuena</title>
      <link>https://dev.to/davidv99</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidv99"/>
    <language>en</language>
    <item>
      <title>Integrate Newrelic in Laravel Vapor</title>
      <dc:creator>David Valbuena</dc:creator>
      <pubDate>Fri, 07 May 2021 18:10:14 +0000</pubDate>
      <link>https://dev.to/davidv99/integrate-newrelic-in-laravel-vapor-4o13</link>
      <guid>https://dev.to/davidv99/integrate-newrelic-in-laravel-vapor-4o13</guid>
      <description>&lt;p&gt;Using &lt;a href="https://blog.laravel.com/vapor-docker-based-deployments" rel="noopener noreferrer"&gt;docker-based deployments&lt;/a&gt; we can configure newrelic from the same file {env} .dockerfile, here we must install and set the newrelic variables, we must also create an entrypoint.sh file in which we will indicate the image the start of the processes to be carried out:&lt;/p&gt;

&lt;p&gt;{env}.dockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; laravelphp/vapor:php74&lt;/span&gt;

&lt;span class="c"&gt;# Download and install newrelic: https://download.newrelic.com/php_agent/release/&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="se"&gt;\
&lt;/span&gt;    curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="s2"&gt;"https://download.newrelic.com/php_agent/release/newrelic-php5-9.16.0.295-linux-musl.tar.gz"&lt;/span&gt; | &lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /tmp &lt;span class="nt"&gt;-zx&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NR_INSTALL_USE_CP_NOT_LN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NR_INSTALL_SILENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    /tmp/newrelic-php5-&lt;span class="k"&gt;*&lt;/span&gt;/newrelic-install &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# add global var to php.ini file&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;$' &lt;/span&gt;&lt;span class="se"&gt;\n\
&lt;/span&gt;&lt;span class="s1"&gt;    extension = "newrelic.so" &lt;/span&gt;&lt;span class="se"&gt;\n\
&lt;/span&gt;&lt;span class="s1"&gt;    newrelic.logfile = "/dev/null" &lt;/span&gt;&lt;span class="se"&gt;\n\
&lt;/span&gt;&lt;span class="s1"&gt;    newrelic.loglevel = "error" &lt;/span&gt;&lt;span class="se"&gt;\n\
&lt;/span&gt;&lt;span class="s1"&gt;    newrelic.appname = "REPLACE_APP_NAME" &lt;/span&gt;&lt;span class="se"&gt;\n\ &lt;/span&gt;
    newrelic.license = "REPLACE_NEWRELIC_LICENCE"' &amp;gt;&amp;gt; /usr/local/etc/php/php.ini

&lt;span class="c"&gt;# Remove newrelic.ini file&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; /usr/local/etc/php/conf.d/newrelic.ini

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /usr/local/etc/newrelic &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"loglevel=error"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/newrelic/newrelic.cfg &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"logfile=/dev/null"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /usr/local/etc/newrelic/newrelic.cfg

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /var/task&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; root&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x /var/task/entrypoint.sh
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["/var/task/entrypoint.sh"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entrypoint.sh file is necessary to start the execution of PHP and indicate the type of process that will be carried out with newrelic&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#! /bin/sh&lt;/span&gt;

&lt;span class="c"&gt;#start Newrelic daemon&lt;/span&gt;
newrelic-daemon -c /usr/local/etc/newrelic/newrelic.cfg

&lt;span class="c"&gt;#start PHP&lt;/span&gt;
/opt/bootstrap

newrelic_background_job(false);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The newrelic.ini file was removed because it generates the following run-time error:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hdmb5759l8tvb6f09kc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hdmb5759l8tvb6f09kc.png" alt="newrelic error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore, the setting of the variables to the php.ini file is carried out, which loads the default options of newrelic.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>vapor</category>
      <category>newrelic</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Laravel 7: Cache route error</title>
      <dc:creator>David Valbuena</dc:creator>
      <pubDate>Wed, 21 Oct 2020 21:29:32 +0000</pubDate>
      <link>https://dev.to/davidv99/laravel-7-cache-route-error-m8g</link>
      <guid>https://dev.to/davidv99/laravel-7-cache-route-error-m8g</guid>
      <description>&lt;p&gt;It is common to create laravel projects in subfolders, and perform an access configuration by subdomains, something similar to: &lt;code&gt;https&lt;a href=""&gt;&lt;/a&gt;://mydomain.com/aliasdomain&lt;/code&gt; , generally, this has been supported and at the time of caching the routes hasn't  been generated a type of conflict, however, in laravel 7 this has generated a mistake in the routes that are specified as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.....'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A solution implemented in a project to solve this problem with the route cache was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a middleware with the following validation:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RouteCache&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Closure&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;$newURI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'REQUEST_URI'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'index.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'REQUEST_URI'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$newURI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Add the middleware to the Kernel file in the middleware array:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$middleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="mf"&gt;....&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nc"&gt;App\Http\Middleware\RouteCache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, what is achieved is that if a route &lt;code&gt; /&lt;/code&gt; is declared within the project, the middleware validates when trying to access it and overwrites the &lt;code&gt; REQUEST_URI &lt;/code&gt; value that the request carries by adding &lt;code&gt;index.php&lt;/code&gt; (this will continue being transparent to the end user)&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
    </item>
  </channel>
</rss>
