Edg*_*ars 10 .htaccess fastcgi ruby-on-rails passenger ruby-on-rails-4
我正在使用Rails 4.1.6和ruby 2.1.8p440.
目前,我想加快性能并添加配置FastCGI.
问题:FastCGI不起作用并且减慢了我的RoR APP.
到目前为止,我有这个目录结构:
我的.htaccess文件:
PassengerAppRoot "/home/individualki/blogs"
PassengerBaseURI "/"
PassengerRuby "/home/individualki/rubyvenv/ror/2.1/bin/ruby"
RailsEnv development
SetEnv RAILS_RELATIVE_URL_ROOT /dispatch
RewriteEngine On
RewriteRule ^(stylesheets/.*)$ - [L]
RewriteRule ^(javascripts/.*)$ - [L]
RewriteRule ^(images/.*)$ - [L]
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [E=X-HTTP_AUTHORIZATION:%{HTTP:Authorization},QSA,L]
Run Code Online (Sandbox Code Playgroud)
我的dispatch.fcgi文件:
#!/home/individualki/rubyvenv/ror/2.1/bin/ruby
ENV['RAILS_ENV'] ||= 'development'
ENV['HOME'] ||= `echo ~`.strip
ENV['GEM_HOME'] = File.expand_path('~/.gems')
ENV['GEM_PATH'] = File.expand_path('~/.gems') + ":" + '/usr/lib/ruby/gems/1.8'
require 'rubygems'
Gem.clear_paths
require 'fcgi'
require '../home/individualki/blogs/config/boot.rb'
require '../home/individualki/blogs/config/environment.rb'
class Rack::PathInfoRewriter
def initialize(app)
@app = app
end
def cadsll(env)
env.delete('SCRIPT_NAME')
parts = env['REQUEST_URI'].split('?')
env['PATH_INFO'] = parts[0]
env['QUERY_STRING'] = parts[1].to_s
@app.call(env)
end
end
Rack::Handler::FastCGI.run
Rack::PathInfoRewriter.new(blogs::Application)
Run Code Online (Sandbox Code Playgroud)
之后我重新启动了服务器
touch tmp/restart.txt
Run Code Online (Sandbox Code Playgroud)
然后访问我的网络应用程序,并意识到它无法正常工作.内容已加载但没有任何资产 - 图像,CSS或js文件.应用程序变得慢得多.
之后,我检查了我的Cpanel,看到我的应用程序现在使用最大程序40/40并且CPU使用率上升.那些事情从来没有发生过(在我看不到的时候)
我的日志文件:
Started GET "/dispatch/assets/parsley.js?body=1" for 85.254.76.76 at 2016-09-24 12:57:06 +0300
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (75.0ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.6ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (367.4ms)
ActionController::RoutingError (No route matches [GET] "/dispatch/assets/parsley.js"):
actionpack (4.1.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `call'
quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
actionpack (4.1.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.3) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.3) lib/rack/runtime.rb:17:in `call'
activesupport (4.1.6) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
rack (1.5.3) lib/rack/lock.rb:17:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.3) lib/rack/sendfile.rb:112:in `call'
railties (4.1.6) lib/rails/engine.rb:514:in `call'
railties (4.1.6) lib/rails/application.rb:144:in `call'
/opt/passenger/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
/opt/passenger/lib/phusion_passenger/request_handler.rb:455:in `block (3 levels) in start_threads'
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (44.4ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.4ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (282.0ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.3ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (25.0ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.6ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (135.4ms)
Started GET "/dispatch/assets/application.js?body=1" for 85.254.76.76 at 2016-09-24 12:57:07 +0300
ActionController::RoutingError (No route matches [GET] "/dispatch/assets/application.js"):
actionpack (4.1.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `call'
quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
actionpack (4.1.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.3) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.3) lib/rack/runtime.rb:17:in `call'
activesupport (4.1.6) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
rack (1.5.3) lib/rack/lock.rb:17:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.3) lib/rack/sendfile.rb:112:in `call'
railties (4.1.6) lib/rails/engine.rb:514:in `call'
railties (4.1.6) lib/rails/application.rb:144:in `call'
/opt/passenger/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
/opt/passenger/lib/phusion_passenger/request_handler.rb:455:in `block (3 levels) in start_threads'
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.3ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (30.7ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.4ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (147.0ms)
Started GET "/dispatch/assets/co.js?body=1" for 85.254.76.76 at 2016-09-24 12:57:07 +0300
ActionController::RoutingError (No route matches [GET] "/dispatch/assets/co.js"):
actionpack (4.1.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.6) lib/rails/rack/logger.rb:20:in `call'
quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
actionpack (4.1.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.3) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.3) lib/rack/runtime.rb:17:in `call'
activesupport (4.1.6) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
rack (1.5.3) lib/rack/lock.rb:17:in `call'
actionpack (4.1.6) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.3) lib/rack/sendfile.rb:112:in `call'
railties (4.1.6) lib/rails/engine.rb:514:in `call'
railties (4.1.6) lib/rails/application.rb:144:in `call'
/opt/passenger/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
/opt/passenger/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
/opt/passenger/lib/phusion_passenger/request_handler.rb:455:in `block (3 levels) in start_threads'
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.2ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (31.6ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.6ms)
Rendered /home/individualki/rubyvenv/ror/2.1/gems/actionpack-4.1.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (150.2ms)
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
速度缓慢可能是由于在开发模式下运行以及所有资产 404 造成的。
\n\n假设您从这里获得配置:http://danielstrunk.me/blog/2014/07/01/configuring-rails-projects-fastcgi-dreamhost-shared-hosting/
\n\n您的路径可能配置不正确。以下是文章对此的描述:
\n\n\n\n\nHere\xe2\x80\x99s 的事情让我有点困惑。Dreamhost 不允许\xe2\x80\x99t 允许 webrick 在共享主机帐户上运行,因此我必须找到替代方案。幸运的是,一旦你知道要寻找什么,它\xe2\x80\x99就很容易设置。在您要安装 Redmine / Rails 应用程序的域的根目录中,创建一个
\npublic文件夹。您\xe2\x80\x99 将在此处创建两个文件:dispatch.fcgi 和.htaccess。这里\xe2\x80\x99是你的dispatch.fcgi应该是什么样子的:
#!/usr/bin/ruby\n\n# Dreamhost clears environment variables when calling dispatch.fcgi, set again\nENV[\'RAILS_ENV\'] ||= \'production\'\nENV[\'HOME\'] ||= `echo ~`.strip\nENV[\'GEM_HOME\'] = File.expand_path(\'~/.gems\')\nENV[\'GEM_PATH\'] = File.expand_path(\'~/.gems\') + ":" + \'/usr/lib/ruby/gems/1.8\'\n\nrequire \'rubygems\'\nGem.clear_paths\nrequire \'fcgi\'\n\nrequire \'../your/app/config/boot.rb\'\nrequire \'../your/app/config/environment.rb\'\n\nclass Rack::PathInfoRewriter\n def initialize(app)\n @app = app\n end\n\n def call(env)\n env.delete(\'SCRIPT_NAME\')\n parts = env[\'REQUEST_URI\'].split(\'?\')\n env[\'PATH_INFO\'] = parts[0]\n env[\'QUERY_STRING\'] = parts[1].to_s\n @app.call(env)\n end\nend\n\nRack::Handler::FastCGI.run\nRack::PathInfoRewriter.new(YourApp::Application)\nRun Code Online (Sandbox Code Playgroud)\n\n<IfModule mod_fastcgi.c>\n AddHandler fastcgi-script .fcgi\n</IfModule>\n<IfModule mod_fcgid.c>\n AddHandler fcgid-script .fcgi\n</IfModule>\n\nOptions +FollowSymLinks +ExecCGI\n\nRewriteEngine On\n\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^(.*)$ dispatch.fcgi/$1 [QSA,L]\n\nErrorDocument 500 "Rails application failed to start properly"\nRun Code Online (Sandbox Code Playgroud)\n