Unicorn Rails堆栈+ Vagrant不提供某些资产

时间:2012-04-05 14:38:41

标签: ruby-on-rails nginx unicorn vagrant rbenv

我正在使用Rails堆栈,其中 nginx + unicorn + rails 适用于生产服务器,但我正在Vagrant下进行测试以进行测试。在执行此操作时,我遇到了rails应用程序的一种奇怪行为,其中通常没有提供一个或其他资产,即application.css未被提供,因此显示整个页面时没有应用任何样式。

我已经搜索了问题并发现Vagrant的FS驱动程序没有完全实现,这会在使用Apache时带来一些问题(没有找到任何提及nginx)。此问题的解决方案是通过将 sendfile off; 添加到配置文件来禁用sendfile。并且......它没有用。

此外,我浏览了日志(Rails,unicorn和nginx)并发现当文件未提供时,在任何日志中都没有提及它。这让我想到问题可能在于Vagrant通过VM共享 rails app 文件夹所使用的机制。正如vagrant的网站所提到的,Vagrant使用Virtual Box的共享文件夹,与其他替代方案相比速度相当慢(如here所示),解决方法是设置NFS共享文件夹。所以,我决定试试NFS,结果是......同样的。不幸的是,有些资产无法提供服务。

有没有人对此有任何想法?我已经搜索了很长一段时间,但没有发现我在这里描述的任何指针。

我正在使用:

Mac OS X 10.6.8 + rbenv(开发)

Vagrant + nginx + rbenv + unicorn + bundler(到舞台)

unicorn.rb

rails_env         = ENV['RAILS_ENV'] || 'production'
app_directory     = File.expand_path(File.join(File.dirname(__FILE__), ".."))

worker_processes 4
working_directory app_directory

listen "/tmp/appname.sock", :backlog => 64
#listen "#{app_directory}/tmp/sockets/appname.sock", :backlog => 64

timeout 30

pid "#{app_directory}/tmp/pids/unicorn.pid"

stderr_path "#{app_directory}/log/unicorn.stderr.log"
stdout_path "#{app_directory}/log/unicorn.stdout.log"

preload_app true
GC.respond_to?(:copy_on_write_friendly=) and
  GC.copy_on_write_friendly = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

的/ etc / nginx的/启用的站点 - /应用程序的名字

upstream unicorn_server {
        server unix:/tmp/appname.sock fail_timeout=0;
}

server {
    listen 80;
    client_max_body_size 4G;
    server_name _;

    keepalive_timeout 5;

    # Location of our static files
    root /home/appname/www/current/public;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      if (!-f $request_filename) {
        proxy_pass http://unicorn_server;
        break;
      }
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /home/hemauto/www/current/public;
    }
  }

0 个答案:

没有答案