我有一个轨道应用程序,我试图在生产环境。我跑了 RAILS_ENV=production rake assets:precompile 这产生了我所有的资产/公共/资产。问题是,当我开始我的应用程序w/ RAILS_ENV=production rails s thin 我得到:

ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):

这种文件确实存在,虽然在 /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css.

任何想法为什么我要这个 RoutingError?

有帮助吗?

解决方案

在生产模式,铁轨将不负责提供静态的资产。因此,你得到这一错误。薄不会这样做,因为它只是一个包围绕轨道。

这是控制该设置在 config/environments/production.rb 在你的申请:

config.serve_static_files = false

或在轨5:

# config/environments/production.rb
config.public_file_server.enabled = true

或者设置 ENV['RAILS_SERVE_STATIC_FILES'] 来真实的。

你可以设定, true 或者使用一个真正的服务器Apache或服务,它将成为静态资产。我怀疑战俘也可以这样做。


如果你在的选择,他们建议使用的 rails_12factor 宝石,它使这一设置的默认。地方的宝石进入一个 production 基于你的 Gemfile, 像这样的:

group :production do
  gem 'rails_12factor'
end

其他提示

加入什么Ryan上面所说,该轨道资产管道的指南描述了如何建立Apache或服务对服务的静态资源用于你。

http://guides.rubyonrails.org/asset_pipeline.html

你真的应该安装配置或Apache提供静态的资产,因为它们的更好的优化这项任务比杂种/薄/独角兽。

只是解决同样的问题。在我的情况Ryan的回答是不是有帮助的。Bratsche指出轨的指南,不幸的是,这没有为我工作了。然而资源是有益的。所以我把配置从那里和加的 指令,向公共目录。没有这个,这没工作。

   # serve static assets
   location ~ ^/assets/ {
     expires 1y;
     root  /path/to/my/cool_project/public;
     add_header Cache-Control public;

     add_header ETag "";
     break;
   }

重新启动服务,这是它。

事实上你不需要修改任何违约配置.你只是 重新编译资产的文件.

除公共/资产

1.瑞克的资产:揍RAILS_ENV=生产

资产汇编

2.瑞克资产:预编译RAILS_ENV=生产

3.重启服务器,例如(配置)

轨4.2已加入/更改这条线在你config/环境/暂存。rb和生产。rb文件:

config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

如果RAILS_SERVE_STATIC_FILES不是设置的,你的服务,资产从你的轨服务(如,与独角兽),然后将默认的"虚假",并RoutingError会发生。

这是一个简单的解决:

config.serve_static_files = true

在轨5, config.serve_static_files 选择已改变,因此现在你需要有

config.public_file_server.enabled = true

服务资产在本地。

试试下面code:

config/环境/生产。rb

config.assets.compile = true

然后运行命令:

RAILS_ENV=production rake assets:precompile

然后把所有编制文件和清单的文件服务器。

我用 米娜+puma+服务器 部署我的轨5应用程序,我得到了

ActionController::RoutingError (No route matches [GET] "/assets/application-658cf2ab3ac93aa5cb41a762b52cf49d7184509c307922cd3fbb61b237a59c1a.css")

检查config/环境/生产。rb

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

服务器已经处理这个, config它corretcly

upstream puma {
  server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/deploy/apps/appname/current/public;
  access_log /home/deploy/apps/appname/current/log/nginx.access.log;
  error_log /home/deploy/apps/appname/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

事情会工作的罚款。

如果有人获得在这里有同样的错误在测试环境,因为我做的,这里就是帮助我

rails assets:clobber assets:precompile RAILS_ENV=test

然后:

ps axu | grep your-username

找到 spring server 过程和他的PID然后杀了它通过:

kill <spring-server-PID>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top