1

The situation is as follows: I made a migration of a rails app from an Ubuntu server with nginx + passenger to a debian server with apache2 + passenger.

All was fine until we tested some ajax functions loading templates with handlebars.js and other scripts. It was complaining about javascript calls so I installed an nginx virtualhost serving on port 8080. Then made an apache proxy configuration on the apache virtualhost to redirect the trafic to the nginx server listening on port 8080. The original server was working fine with nginx so I though this should work, and it did.

But lately we tested more menus of the app and found that it did not work to upload files, although this is working on the apache2 if I remove the proxy lines from the virtualhost config.

This is the Apache2 virtualhost file:

<VirtualHost 217.13.81.93:443>
    ServerAdmin webmaster@design-union.co.uk
    ServerName design-union.co.uk
    ServerAlias www.design-union.co.uk vu2029.admin.tantosoft.com

    LogLevel error
    ErrorLog /var/log/apache2/design-union.co.uk/error.log

    #DocumentRoot /var/www/virtual/design-union.co.uk/htdocs
    DocumentRoot /var/www/virtual/design-union.co.uk/htdocs/current.new/public

    PassengerLogLevel 3

    Alias /errors /var/www/virtual/design-union.co.uk/errors/

    SuexecUserGroup vu2029 vu2029

    #SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
        SetHandler "proxy:unix:/var/run/php5-fpm-design-union.co.uk.sock|fcgi://design-union.co.uk/"
    </FilesMatch>

    <Directory /var/www/virtual/design-union.co.uk>
        Options +SymLinksIfOwnerMatch
        Require all granted
    </Directory>

    <Directory /var/www/virtual/design-union.co.uk/htdocs>
        AllowOverride All
        Options -MultiViews
     </Directory>

    #ScriptAlias /cgi-bin/ /var/www/virtual/design-union.co.uk/cgi-bin/

    <Directory /var/www/virtual/design-union.co.uk/cgi-bin>
    #    AllowOverride AuthConfig Indexes Limit
    </Directory>

    RedirectMatch permanent ^(/(?:ftp|pma|webmail)[/]?)$ http://admin.tantosoft.com$1
    ProxyRequests Off
    ProxyPass /stats http://localhost/stats/design-union.co.uk
    ProxyPassReverse /stats http://localhost/stats/design-union.co.uk

    ProxyPass / http://www.design-union.co.uk:4443/
    ProxyPassReverse / http://www.design-union.co.uk:4443/

    <Location /stats>
        RewriteEngine on
        RewriteRule ^(.+)?config=([^?&]+)(.*) $1?config=design-union.co.uk&$3 [NC,L]
        AuthType Basic
        AuthName "Statistics for domain design-union.co.uk"
        AuthUserFile /var/www/virtual/design-union.co.uk/.htpasswd
        AuthGroupFile /var/www/virtual/design-union.co.uk/.htgroup
        Require group statistics
    </Location>

    SSLEngine On
    SSLCertificateFile /var/www/imscp/gui/data/certs/design-union.co.uk.pem
    SSLCertificateChainFile /var/www/imscp/gui/data/certs/design-union.co.uk.pem

    Include /etc/apache2/imscp/design-union.co.uk.conf
</VirtualHost>

This is the nginx virtualhost file:

server {
    server_name www.design-union.co.uk;

    listen 217.13.81.93:4443;
    listen [::]:4443;

    ssl on;
    ssl_certificate /var/www/imscp/gui/data/certs/design-union.co.uk.pem;
    ssl_certificate_key /var/www/imscp/gui/data/certs/design-union.co.uk.pem;

    root /var/www/virtual/design-union.co.uk/htdocs/current.new/public;
    passenger_enabled on;
    passenger_min_instances 1;
    passenger_friendly_error_pages on;
    passenger_user vu2029;

    rails_env production;

    client_body_buffer_size 10M;

    location /errors {
        alias /var/www/imscp/gui/public/errordocs;
    }

    error_page 401 /errors/401.html;
    error_page 403 /errors/403.html;
    error_page 404 /errors/404.html;
    error_page 497 https://$host:$server_port$request_uri;
    error_page 500 /errors/500.html;
    error_page 503 /errors/503.html;

    location ~ ^/assets/ {
      gzip_static on;
      expires 1y;
      add_header Cache-Control public;
      add_header ETag "";
      break;
    }

    error_page   500 502 503 504  /server-500.html;
    location /server-500.html {
      root /var/www/nginx-default;
    }
}
passenger_pre_start http://www.design-union.co.uk;

Both virtualhosts definitions use the user vu2029 to do filesystem things, and also I changed the nginx user to run as vu2029.

If I remove the Apache2 proxy lines and run the app on apache2 + passenger, it does upload the files correctly, but fails on other javascript parts. If I add the proxy lines and run the app on nginx, it renders all fine the javascripts but fails to upload files.

I'm getting crazy. See also some of the logs from the rails production.log:

Started POST "/admin/assets.json" for 88.5.145.53 at 2017-05-09 19:02:09 +0200
Processing by Admin::AssetsController#create as JSON
  Parameters: {"authenticity_token"=>"7iBXhXjcL/Jp5AmeXpT9HV2B/Ilfz08z5CUf1EWkQA=", "file"=>#<ActionDispatch::Http::UploadedFile:0x007f5d58f47c68 @original_filename="walle_back.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"walle_back.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20170509-18136-1o9vefd>>}
  MOPED: 127.0.0.1:27017 QUERY        database=design_union_production collection=admins selector={"$query"=>{"_id"=>"54298de59acc936174000004"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.3929ms)
500: /admin/assets.json :: {"authenticity_token"=>"7iBXhXjcL/Jp5AmeXpT9HV2B/Ilfz08z5CUf1EWkQA=", "file"=>#<ActionDispatch::Http::UploadedFile:0x007f5d58f47c68 @original_filename="walle_back.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"walle_back.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20170509-18136-1o9vefd>>, "action"=>"create", "controller"=>"admin/assets", "format"=>"json"}
  MOPED: 127.0.0.1:27017 QUERY        database=design_union_production collection=pages selector={"$query"=>{"role"=>"error"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.8137ms)
Page.ordered_slices (0.5ms)
  Rendered text template (0.0ms)
Completed 500 Internal Server Error in 75.8ms (Views: 0.9ms)

The Firebug console log:

POST https://www.design-union.co.uk:4443/admin/assets.json

500 Internal Server Error
        472ms   
jquery.min.js (línea 4)
EncabezadosPostCookies
ver fuente
Cache-Control   
no-cache
Connection  
keep-alive
Content-Type    
application/json; charset=utf-8
Date    
Tue, 09 May 2017 17:02:09 GMT
Server  
nginx/1.10.2 + Phusion Passenger 5.1.2
Transfer-Encoding   
chunked
X-Powered-By    
Phusion Passenger 5.1.2
X-Rack-Cache    
invalidate, pass
X-Request-Id    
6e4b5a7447ed78d9b3cc24f33f2a30f8
X-Runtime   
0.102857
X-UA-Compatible 
IE=Edge,chrome=1
status  
500 Internal Server Error
ver fuente
Accept  
*/*
Accept-Encoding 
gzip, deflate, br
Accept-Language 
en-US,en;q=0.5
Content-Length  
586541
Content-Type    
multipart/form-data; boundary=---------------------------10471913232033507427250099373
Cookie  
_design_union_session=Bh7CEkiD3Nlc3Npb25faWQGOgZFVEkiJTMzZmUxYTliM2NmYjNlOWZmOGU4NTg3Y2RhMWUwYTcwBj
sAVEkiGndhcmRlbi51c2VyLmFkbWluLmtleQY7AFRbB1sGVToaTW9wZWQ6OkJTT046Ok9iamVjdElkIhFUKY3lmsyTYXQAAARJIi
IkMmEkMTAkWkhpZ1VLMmxtdGFXMms5cG16Ui8wZQY7AFRJIhBfY3NyZl90b2tlbgY7AEZJIjE3eGlCWGhYamNML0pwNUFtZVhwVDlIVjJCL0lsZnowOHo1Q1VmMUVXa1FBPQY7AEY
%3D--11e2341939add257da345ddb03c4bac0d661b3d7; __utma=1.1509736449.1494261374.1494332932.1494339392.4
; __utmc=1; __utmz=1.1494261374.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=85681676.479307049
.1494264038.1494264038.1494333556.2; __utmc=85681676; __utmz=85681676.1494264038.1.1.utmcsr=(direct)
|utmccn=(direct)|utmcmd=(none); __utmb=1.60.10.1494339392; __utmt=1
Host    
www.design-union.co.uk:4443
Referer 
https://www.design-union.co.uk:4443/admin/assets
User-Agent  
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0
X-CSRF-Token    
7iBXhXjcL/Jp5AmeXpT9HV2B/Ilfz08z5CUf1EWkQA=
X-Requested-With    
XMLHttpRequest
"NetworkError: 500 Internal Server Error - https://www.design-union.co.uk:4443/admin/assets.json"
assets.json

The files are uploaded into the server's /tmp/ folder, but then it is not moved to the application system/files/ folder. I though it could be permissions, and for testing I chmod the full project files and dirs 777 with no luck. Both nginx and the apache process are running from the user vu2029.

This is the log of the standalone Passenger running on port 3000 serving the same app:

    Started POST "/admin/assets.json" for 88.5.145.53 at 2017-05-11 12:25:17 +0200
Processing by Admin::AssetsController#create as JSON
  Parameters: {"authenticity_token"=>"7iBXhXjcL/Jp5AmeXpT9HV2B/Ilfz08z5CUf1EWkQA=", "file"=>#<ActionDispatch::Http::UploadedFile:0x0000000680f650 @original_filename="ios_mosaic_hor.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"ios_mosaic_hor.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20170511-15343-13plto5>>}
  MOPED: 127.0.0.1:27017 QUERY        database=design_union_production collection=admins selector={"$query"=>{"_id"=>"54298de59acc936174000004"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.4151ms)
App 15343 stdout: Command :: identify -format %wx%h '/tmp/ios_mosaic_hor20170511-15343-18f5uzb.jpg[0]'
App 15343 stdout: Command :: identify -format %m '/tmp/ios_mosaic_hor20170511-15343-18f5uzb.jpg[0]'
App 15343 stdout: Command :: identify -format %m '/tmp/ios_mosaic_hor20170511-15343-18f5uzb.jpg[0]'
App 15343 stdout: Command :: convert '/tmp/ios_mosaic_hor20170511-15343-18f5uzb.jpg[0]' -resize "256x256>" -strip -density 72x72 -depth 8 '/tmp/ios_mosaic_hor20170511-15343-18f5uzb20170511-15343-1jwvw6t'
App 15343 stdout: Command :: file -b --mime '/tmp/ios_mosaic_hor20170511-15343-18f5uzb20170511-15343-1jwvw6t'
App 15343 stdout: Command :: identify -format %wx%h '/tmp/ios_mosaic_hor20170511-15343-18f5uzb.jpg[0]'
App 15343 stdout: Command :: identify -format %wx%h '/tmp/ios_mosaic_hor20170511-15343-18f5uzb20170511-15343-1jwvw6t20170511-15343-1gl5n8l[0]'
  MOPED: 127.0.0.1:27017 INSERT       database=design_union_production collection=assets documents=[{"_id"=>"59143c0d21232f27e7000002", "file_dimensions"=>{"original"=>"1130x960", "admin"=>"256x217"}, "page_cache"=>[], "file_file_name"=>"ios_mosaic_hor.jpg", "file_content_type"=>"image/jpeg", "file_file_size"=>194168, "file_fingerprint"=>"4fbef76166cb06ae99e9c240e4a189f3", "file_updated_at"=>2017-05-11 10:25:17 UTC, "tags"=>"", "_keywords"=>["ios", "mosaic", "hor", "jpg"], "updated_at"=>2017-05-11 10:25:17 UTC, "created_at"=>2017-05-11 10:25:17 UTC}] flags=[] (0.2253ms)
App 15343 stdout: [paperclip] Saving attachments.
500: /admin/assets.json :: {"authenticity_token"=>"7iBXhXjcL/Jp5AmeXpT9HV2B/Ilfz08z5CUf1EWkQA=", "file"=>#<ActionDispatch::Http::UploadedFile:0x0000000680f650 @original_filename="ios_mosaic_hor.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"ios_mosaic_hor.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20170511-15343-13plto5>>, "action"=>"create", "controller"=>"admin/assets", "format"=>"json"}
  MOPED: 127.0.0.1:27017 QUERY        database=design_union_production collection=pages selector={"$query"=>{"role"=>"error"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.4716ms)
Page.ordered_slices (0.3ms)
  Rendered text template (0.0ms)
Completed 500 Internal Server Error in 99.7ms (Views: 0.6ms)

The files get uploaded to /tmp folder, but looks like it is not moved to the app files folder. When running the app in Apache2 it all works well. I'm stuck. Any help?

Edit:

/var/log/nginx/error.log:

App 26490 stdout: Command :: identify -format %wx%h '/tmp/walle_back20170511-26490-1ka42xa.png[0]'
App 26490 stdout: [paperclip] An error was received while processing: #<Paperclip::Errors::CommandNotFoundError: Could not run the `identify` command. Please install ImageMagick.>
App 26490 stdout: Command :: identify -format %wx%h '/tmp/walle_back20170511-26490-1ka42xa.png[0]'

I'm checking by command line and the "identify command is installed on the server, all the imagemagick package is installed. Permissions to access the file, or the identify file is not accesible by the paperclip module?

  • checking nginx error log throws the above error.. – Rou May 11 '17 at 11:30
0

Solved: at the end, it was a path configuration of the Paperclip gem. I added the following to the config/environments/production.rb file:

Paperclip.options[:command_path] = "/usr/bin"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.