Apache passenger deploy sinatra - ruby

I am using apache and passenger. I have my app in /home/git/app/public
My sites-enbled have a file called app with this content
<VirtualHost *:9292>
#ServerName www.yourhost.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /home/git/app/public
<Directory /home/git/app/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
</Directory>
My mods-enabled have:
passenger.load
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-4.0.21/buildout/apache2/mod_passenger.so
passenger.conf
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p392/gems/passenger-4.0.21
PassengerDefaultRuby /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby
This paths were returned from to run:
passenger-install-apache2-module
All paths are working.
$>ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
$> which ruby
/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby
error.log in apache
http://pastebin.com/u50SQJ4h
Procces running
root 622 0.2 1.7 118432 8600 ? Ss 12:55 0:00 /usr/sbin/apache2 -k start
root 624 0.1 0.4 223496 2064 ? Ssl 12:55 0:00 PassengerWatchdog
root 631 0.0 0.4 503552 2424 ? Sl 12:55 0:00 PassengerHelperAgent
nobody 639 0.0 0.9 235480 4900 ? Sl 12:55 0:00 PassengerLoggingAgent
www-data 655 0.0 1.1 118504 5888 ? S 12:55 0:00 /usr/sbin/apache2 -k start
www-data 657 0.0 1.0 118456 5388 ? S 12:55 0:00 /usr/sbin/apache2 -k start
www-data 659 0.0 1.0 118456 5388 ? S 12:55 0:00 /usr/sbin/apache2 -k start
www-data 660 0.0 1.0 118456 5388 ? S 12:55 0:00 /usr/sbin/apache2 -k start
www-data 661 0.0 1.0 118456 5388 ? S 12:55 0:00 /usr/sbin/apache2 -k start
When I visit IPSERVER:9292, not load. In port 80 are running normally. If I will run my app in :9292 I need to run:
passenger start -p '9292' -e 'production' --daemon
My app has the following struct:
/home/git/app
app.rb
config.ru
public
tmp
$> cat config.ru
require 'rubygems'
require 'sinatra'
set :environment, ENV['RACK_ENV'].to_sym
disable :run, :reload
require 'app.rb'
run Sinatra::Application
$> cat app.rb
get '/hi' do
"Hello World!"
end
But I want my app to start with system. Any idea?

Related

cgi script can't write to world writable file under apache

I'm attempting to create a simple CGI script using CentOS 7, Apache 2.4 and Ruby 2.0. All tools installed from official packages.
My script, which resides at /var/www/cgi-bin/test.cgi is:
#!/usr/bin/ruby
puts "Content-Type: text/plain\n\n"
begin
file = File.open("test.log", "a")
file.puts("foobar")
file.close
rescue Exception
puts "pwd: #{`pwd`}"
puts $!.inspect
end
When I load http://myhost/cgi-bin/test.cgi, I get the following:
pwd: /var/www/cgi-bin
#<Errno::EACCES: Permission denied - test.log>
However:
[root#host cgi-bin]# ls -l /var/www/cgi-bin
total 8
-rwxr-xr-x. 1 root root 153 Jul 10 22:03 env.cgi
-rwxr-xr-x. 1 root root 359 Jul 11 00:45 test.cgi
-rw-rw-rw-. 1 root root 0 Jul 11 00:42 test.log
How (and where) can I write data from inside this cgi script if not to a world-writable file in the script's own working directory?
SELinux was blocking the file writes. "setenforce Permissive" allowed them to go through. Edited /etc/sysconfig/selinux and rebooted to make permanent.

session.save_path incorrect in magento + memcache for session

I am trying to configure Magento to use memcache for session. I have installed memcached and also php5-memcache. I have also added "extension=memcache.so" in memcache.ini.
I have made sure the memcached instance is also running in the localhost port number 11213. However, when I try to login to Magento admin I get an error -
Warning: Unknown: Failed to write session data (memcache). Please verify that the current setting of session.save_path is correct (tcp://127.0.0.1:11213?persistent=0&weight=2&timeout=10&retry_interval=10) in Unknown on line 0
The following is the memcache configuration in local.xml -
<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://127.0.0.1:11213?persistent=0&weight=2&timeout=10&retry_interval=10]]></session_save_path>
The following are the grep for memcached,
www-data 1329 1 0 08:13 ? 00:00:00 /usr/bin/memcached -d -m 64 -p 11213 -u www-data -l 127.0.0.1
www-data 1511 1 0 08:18 ? 00:00:00 /usr/bin/memcached -d -m 64 -p 11211 -u www-data -l 127.0.0.1
www-data 1518 1 0 08:18 ? 00:00:00 /usr/bin/memcached -d -m 64 -p 11212 -u www-data -l 127.0.0.1
I have been meddling up with this for a couple of days now and I am not sure what the issue. Any help is appreciated.
Thanks,
G
Please note there is a difference between memcache and memcached. I’ve found that the Magento sessions integration expects you to use this:
<session_save><![CDATA[memcached]]></session_save>
You should install the PHP memcached libraries, as well.

How do i monitor independed applications with god?

I'm currently looking into options for process monitoring of Rails/Ruby Projects and quite like god.
But i cant really find anything on how to monitor multiple applications (for example 2 rails projects running on one machine) with god.
As far as i see it i just set up god (system ruby) and have each project add its own configuration (maybe somehow in a deploy-hook).
This should also work with the projects running different ruby versions (rbenv, rvm) or bundler, since the god ruby does not have to access any project code.
Does anyone already use it like this? Or is there a better approach?
I use god to watch all my stuff (unicorn, redis, resque workers). Basic setup is like this:
God is installed globally, loads on system startup and reads its config file, /etc/god/all.god.
/etc/god/all.god
files = Dir.glob "/etc/god/**/*.god"
files.each do |f|
next if f == '/etc/god/all.god'
God.load f
end
This file loads all config files in /etc/god and its children. Deploy scripts put config files there and tell god to (re)load them.
$ ls -l /etc/god
total 16
-rw-r--r-- 1 root root 108 2012-02-23 16:26 all.god
drwxr-xr-x 2 sergio sergio 4096 2012-03-20 20:59 app1_production
drwxr-xr-x 2 sergio sergio 4096 2012-03-27 00:58 app2_production
drwxr-xr-x 2 root root 4096 2012-04-23 01:37 util
$ ls -l /etc/god/app1_production/
total 0
lrwxrwxrwx 1 sergio sergio 55 2012-03-20 20:59 redis.god -> /srv/app1_production/current/config/god/redis.god
lrwxrwxrwx 1 sergio sergio 56 2012-03-20 20:59 resque.god -> /srv/app1_production/current/config/god/resque.god
lrwxrwxrwx 1 sergio sergio 57 2012-03-20 20:59 unicorn.god -> /srv/app1_production/current/config/god/unicorn.god
Here's a head of unicorn.god.
rails_env = "production"
pid_dir = "/srv/app1_#{rails_env}/shared/pids"
rails_root = "/srv/app1_#{rails_env}/current"
God.watch do |w|
w.name = "unicorn-#{rails_env}"
w.interval = 30.seconds # default
# unicorn needs to be run from the rails root
w.start = "cd #{rails_root} && /home/sergio/.rvm/bin/r193_bundle exec unicorn_rails -c #{rails_root}/config/unicorn/unicorn.#{rails_env}.rb -E #{rails_env} -D"
# QUIT gracefully shuts down workers
w.stop = "kill -QUIT `cat #{pid_dir}/unicorn.pid`"
# USR2 causes the master to re-create itself and spawn a new worker pool
w.restart = "kill -USR2 `cat #{pid_dir}/unicorn.pid`"
As you can see, unicorns are launched via rvm wrappers and therefore each new app can use its own ruby. Also, you provide your own start, stop and restart commands, so you can use god to watch any piece of software.
This approach works very well for me (so far).

TCPServer Error: Address already in use - bind(2)

Jekyll was working fine for me few weeks back but now all of a sudden it gives me the following error:
TCPServer Error: Address already in use - bind(2)
INFO WEBrick::HTTPServer#start: pid=7300 port=4000
% lsof -i :4000
<fetches nothing>
Even though nothing is running on the port. Below are the details:
% jekyll --version
Jekyll 0.11.2
% where jekyll
/home/bhaarat/.rvm/gems/ruby-1.9.2-p290/bin/jekyll
/usr/bin/jekyll
% ruby --version
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
% rvm --version
rvm 1.10.0
Here is the output
% jekyll --server
Configuration from /home/bhaarat/blog/omnipresent.github.com/_config.yml
Auto-regenerating enabled: /home/bhaarat/blog/omnipresent.github.com -> /home/bhaarat/blog/omnipresent.github.com/_site
[2012-04-21 13:46:40] regeneration: 38 files changed
[2012-04-21 13:46:40] INFO WEBrick 1.3.1
[2012-04-21 13:46:40] INFO ruby 1.9.2 (2011-07-09) [i686-linux]
[2012-04-21 13:46:40] WARN TCPServer Error: Address already in use - bind(2)
[2012-04-21 13:46:40] INFO WEBrick::HTTPServer#start: pid=7382 port=4000
I know the address isn't in use and jekyll is probably breaking for some other reason but throwing that error. What are my options? I've tried re-installing as well.
Type this in your terminal to find out the PID of the process that's using the 3000 port:
$ lsof -wni tcp:3000
Then, use the number in the PID column to kill the process:
$ kill -9 PID
I was not qualified to post comment. So I added a new answer.
I encountered this problem on Mac OS X 10.10.3. And I had never installed/used Jekyll before. I was not able to start jekyll server with its default port number 4000. The reason was that the port was the same as what NoMachine used. With
$ sudo lsof -wni tcp:4000
Note: Running this command without sudo will have no output.
I saw this output:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nxd 449 nx 3u IPv4 0x8d22************ 0t0 TCP *:terabase (LISTEN)
nxd 449 nx 4u IPv6 0x8d22************ 0t0 TCP *:terabase (LISTEN)
The port 4000 was occupied by nxd, which was the process started by NoMachine. And
$ sudo kill -9 449
would not work, because NoMachine's nxd process would keep restarting, with a new PID.
Therefore, I had to either:
Changed my jekyll server port in the site _config.yml to another spared one. I appended the line below to _config.yml and it worked.
port: 3000 # change server port to 3000
or
Changed NoMachine's default nxd port, or Uninstall NoMachine
Ctrl-Z doesn't terminate a program, but rather suspends it and sends it to the background. You can resume the program with the "fg" command. To actually terminate it, use Ctrl-C.
The actual error message seems to be bogus and can be ignored. I am getting the same error message "address in use" but jekyll works fine anyway at the expected port.
I have met this problem recently.
I tried out all the method mentioned above, and even restarted my computer, but still couldn't solve it!!! Then I removed the jekyll and installed a new version, it just worked.
gem uninstall jekyll & gem install jekyll (maybe you need super user priviledge).
If you really get annoyed with similar bugs, this sb method is worth a try...
Based on the top answer, I came up with a simple way
lsof -wni tcp:3000 | xargs -I{} kill -9 {}
It takes the output of finding PID in which port the tcp server is running at. In this case it is 3000.
It then kills the processes running that
PID
Check that you don't have another terminal open where you are already running a server.
If that is the case, do a CTRL-C to shutdown the server, and that will free the port/address.
First you need to find PID of the process that's using the 3000 port:
$ps -ef
Output Like this:
1003 4953 2614 0 08:51 pts/0 00:00:00 -bash
1003 5634 1 0 08:56 pts/0 00:00:00 spring server | moviestore | started 2 hours ago
1003 5637 5634 0 08:56 ? 00:00:01 spring app | moviestore | started 2 hours ago | development mode
1003 6078 4953 0 09:03 pts/0 00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore]
1003 6117 2614 0 09:03 pts/1 00:00:00 -bash
root 6520 2 0 09:57 ? 00:00:00 [kworker/u8:2]
root 6936 1225 0 11:09 ? 00:00:00 [lightdm] <defunct>
1003 7084 1 0 11:09 ? 00:00:00 /usr/bin/python /usr/share/apport/apport-gtk
1003 7475 1 0 11:10 ? 00:00:00 /usr/bin/python /usr/share/apport/apport-gtk
root 8739 1225 1 11:29 tty8 00:00:11 /usr/bin/X :1 -auth /var/run/lightdm/root/:1 -nolisten tcp vt8 -novtswitch
root 8853 1225 0 11:29 ? 00:00:00 lightdm --session-child 13 22
1002 8943 1 0 11:30 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
1002 8954 8853 0 11:30 ? 00:00:00 gnome-session --session=ubuntu
1002 8992 8954 0 11:30 ? 00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
1002 8995 1 0 11:30 ? 00:00:00 /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
1002 8996 1 0 11:30 ? 00:00:00 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
1002 9007 8954 0 11:30 ? 00:00:00 /usr/lib/gnome-settings-daemon/gnome-settings-daemon
1002 9015 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfsd
1002 9018 8954 1 11:30 ? 00:00:07 compiz
1002 9021 1 0 11:30 ? 00:00:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
1002 9028 8954 0 11:30 ? 00:00:00 /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
1002 9029 8954 0 11:30 ? 00:00:01 nautilus -n
1002 9030 8954 0 11:30 ? 00:00:00 /usr/lib/gnome-settings-daemon/gnome-fallback-mount-helper
1002 9031 8954 0 11:30 ? 00:00:00 nm-applet
1002 9032 8954 0 11:30 ? 00:00:02 /opt/mTrac/mTrac
1002 9033 8954 0 11:30 ? 00:00:00 bluetooth-applet
1002 9045 9032 0 11:30 ? 00:00:00 /opt/mTrac/mTrac --type=zygote --no-sandbox
1002 9050 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
1002 9054 1 0 11:30 ? 00:00:00 /usr/bin/pulseaudio --start --log-target=syslog
1002 9057 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
1002 9062 1 0 11:30 ? 00:00:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
here you can see :
1003 6078 4953 0 09:03 pts/0 00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore]
localhost:3000 have pid: 6078
kill that process by
$sudo kill 6078
then run
$rails s
we can user fuser command
fuser -k 3000/tcp
work around
in /_site run: python -m SimpleHTTPServer 8080

OSX Server: apache2 running but “Problem loading page”

I have setup OSX Server 10.6, all updates installed, started apache2, which is running:
sudo apachectl graceful
I see in /var/log/apache2/errorlog
[Fri Dec 17 10:11:49 2010] [notice] Apache/2.2.15 (Unix) configured -- resuming normal operations
Also
ps -ef | grep httpd
shows several processes:
0 49388 1 0 0:00.05 ?? 0:00.07 /usr/sbin/httpd -D FOREGROUND
70 49389 49388 0 0:00.00 ?? 0:00.00 /usr/sbin/httpd -D FOREGROUND
70 49390 49388 0 0:00.00 ?? 0:00.00 /usr/sbin/httpd -D FOREGROUND
70 49391 49388 0 0:00.00 ?? 0:00.00 /usr/sbin/httpd -D FOREGROUND
70 49392 49388 0 0:00.00 ?? 0:00.00 /usr/sbin/httpd -D FOREGROUND
...
In httpd.conf I edited DocumentRoot:
ServerName bioinfo.mni.fh-giessen.de:80
DocumentRoot "/Volumes/ServerHD2/Web_Documents"
ErrorLog "/var/log/apache2/error_log"
<Directory "/Volumes/ServerHD2/Web_Documents">
Order Allow,Deny
Allow from All
</Directory>
Syntax is OK:
apachectl configtest
Syntax OK
Yet, I get timeouts at http://bioinfo.mni.fh-giessen.de :
Problem loading page
Any clue ?
Are you sure you edited the right file? OS X Server has a way of not keeping to standards. The actual configuration entries are not in /etc/httpd/httpd.conf, but in subdirectories of /etc/apache2/sites. Check out this FAQ.
I would recommend using the Server Admin utility to set up the server. It will be a lot easier and quicker than trying to get the configuration right manually. You can always add or change rules later, once the site is up and running.
No direct local GUI access possible for a few days, no access via Remote Desktop either. My only way is ssh right now, but I will be happy to try Server Admin utility in a few days. For now I am restricted to the command line. Yes, I edited both /etc/apache2/httpd.conf and /etc/apache2/sites/0000_any_80_.conf, without avail. Is
sudo serveradmin fullstatus web
anyhow instructive :
web:readWriteSettingsVersion = 1
web:totalKBytes = 0
web:emailRulesRunning = no
web:boundToKerberos = yes
web:teamsRunning = yes
web:postfixRunning = no
web:servicePortsRestrictionInfo = _empty_array
web:health = _empty_dictionary
web:currentThroughput = 0
web:passwordResetRunning = no
web:ApacheMode = 2
web:statusMessage = ""
web:apacheVersion = "Unknown"
web:state = "RUNNING"
web:setStateVersion = 1
web:apacheState = "RUNNING"
web:proxyState = "STOPPED"
web:htCacheCleanRunning = no
web:calendarRunning = yes
web:servicePortsAreRestricted = "YES"
web:currentRequestsBy10 = 0
web:logPaths:logPathsArray = _empty_array
web:totalRequests = 0
web:startedTime = ""
?

Resources