1. 安裝Nginx和Passenger(參考:https://www.phusionpassenger.com/library/install/nginx/install/oss/el6/)sudo yum install -y epel-release pygpgme curlsudo curl...
1. 安裝Nginx和Passenger(參考:https://www.phusionpassenger.com/library/install/nginx/install/oss/el6/)
sudo yum install -y epel-release pygpgme curl sudo curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo sudo yum install -y nginx passenger passenger-devel
2. 配置Nginx和Passenger
/etc/nginx/nginx.conf 在文件中http中添加rails應用配置server block server{ listen port; #替換為監聽的埠 server_name hostname; #替換為主機地址 root APP_PATH/public; #APP_PATH表示rails應用根目錄 passenger_enabled on; passenger_ruby /usr/local/bin/ruby; #ruby解析器路徑 可通過 passenger-config about ruby-command 查看 access_log APP_PATH/log/access.log; error_log APP_PATH/log/error.log; client_header_buffer_size 512k; #請求頭大小設置 large_client_header_buffers 4 512k; } /etc/nginx/conf.d/passenger.conf #將該文件下這三個的註釋符去掉 passenger_root /some-filename/locations.ini; passenger_ruby /usr/bin/ruby; passenger_instance_registry_dir /var/run/passenger-instreg;
3. 重啟Nginx,檢測Passenger是否被Nginx啟動成功
sudo passenger-config validate-install sudo passenger-memory-stats
如果沒有錯誤日誌,即表示配置成功。
4. 升級nginx和passenger,只需要執行下麵命令即可:
sudo yum update nginx passenger sudo service nginx restart
5. 安裝Redis,使用sidekiq為Rails部署任務非同步執行環境。
git clone https://github.com/antirez/redis.git yum install -y tcl cd redis && make && make test sysctl vm.overcommit_memory=1 echo 511 > /proc/sys/net/core/somaxconn echo never > /sys/kernel/mm/transparent_hugepage/enabled cd src && ./redis-server ../redis.conf #使用指定的redis.conf啟動
這是是免安裝方法,便於升級,如要安裝到Linux中,可以執行安裝操作,詳細參考README.md.
6. 啟動redis之後,就可以啟動sidekiq執行
cd APP_PATH && bundle exec sidekiq -q mailers -q default
記住必須指定要執行的隊列(mailers、default),否則任務不會執行。
遇到錯誤解決辦法:
1. Cannot stat 'XXX/config.ru': Permission denied (errno=13);
為應用目錄下的public添加執行許可權,如下:
chmod g+x, o+x APP_PATH/public chmod g+x, o+x APP_PATH
2. Errno::EACCES (Permission denied @ dir_s_mkdir - XXX)/Errno::EACCES (Permission denied @ utime_internal - XXX.cache)
這些錯誤都是因為沒有寫或者執行文件的許可權,因為如果config.ru的所有者是root,那麼passenger用來啟動rails的用戶會變為nobody,所以導致一些目錄沒有寫許可權,可通過賦予許可權解決。如果config.ru的所有者不是root,那麼就會以它的所有者啟動rails。詳細:https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/ruby/
3. Request Entity Too Large
因為body太大,修改nginx配置即可
在對應的server block中添加下麵的配置:
client_max_body_size 10M; #設置指定的大小