使用config.assets.compile = false在localhost上运行rails server -e production会破坏Rails Asset Pipeline

时间:2013-01-16 16:19:50

标签: apache ruby-on-rails-3.2 asset-pipeline webrick

我正在尝试迁移我们的应用程序以使用Asset Pipeline,因此我一直在本地测试我的更改(使用内置的Webrick服务器)。我的production.rb看起来像这样:

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = true

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = false

  # Generate digests for assets URLs
  config.assets.digest = true

注意,config.serve_static_assets = true

这非常有效,因为我可以运行

rm -rf tmp
rm -rf public/assets
RAILS_ENV=production bundle exec rake assets:clean
RAILS_ENV=production bundle exec rake assets:precompile 
rails server -p 3500 -e production

在我的本地机器上,一切都很好。但是,现在我想将我的更改推送到我们的生产Apache服务器,我希望Apache提供资源,所以我设置:

config.serve_static_assets = false

如果我现在尝试在本地机器上加载生产轨道服务器,则不会加载静态资产。我不确定这是否是预期的行为(我的意思是,我告诉Rails不要为我提供静态资产而不是 - 但我想某些东西为他们服务)。

所以我的问题是,如何在config.serve_static_assets = falseproduction.rb同时仍能运行本地生产轨道服务器?我的要求是甚至可能还是明智的?

由于

注意:使用Rails 3.2.11

1 个答案:

答案 0 :(得分:0)

rake assets:precompile一起,您应该指示您的网络服务器提供公共文件夹。

您是否正在使用Passenger进行部署?

请参阅http://www.modrails.com/documentation/Users%20guide%20Apache.html,特别是:

Listen *:80
NameVirtualHosts *:80
....

LoadModule passenger_module /somewhere/passenger-x.x.x/ext/apache2/mod_passenger.so

PassengerRuby /usr/bin/ruby
PassengerRoot /somewhere/passenger/x.x.x
PassengerMaxPoolSize 10

<VirtualHost *:80>
    ServerName www.foo.com
    DocumentRoot /webapps/foo/public
    RailsBaseURI /rails
</VirtualHost>

<Directory "/webapps/mycook/public">
   Options FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>