【问题标题】:Some issues acessing asset files in production mode在生产模式下访问资产文件的一些问题
【发布时间】:2014-12-20 10:17:28
【问题描述】:

我正在使用 Ruby on Rails 4.1.1,在我的本地机器上我有以下图像:

# Directory: MyApp/app/assets/images/
logo.png

我使用 Capistrano gem 上传 MyApp,一切似乎都按预期工作。但是,当我尝试通过以下 URL 的浏览器访问我的网站时

1) http://www.myapp.org/logo.png
2) http://www.myapp.org/assets/logo.png
3) http://www.myapp.org/images/logo.png
4) http://www.myapp.org/assets/images/logo.png

然后我得到一个错误页面:

The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.

在我得到的日志文件中:

1) ActionController::RoutingError (No route matches [GET] "/logo.png"):
2) ActionController::RoutingError (No route matches [GET] "/assets/logo.png"):
3) ActionController::RoutingError (No route matches [GET] "/images/logo.png"):
4) ActionController::RoutingError (No route matches [GET] "/assets/images/logo.png"):

  actionpack (4.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (4.1.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.1.1) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.1.1) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.1.1) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.1.1) lib/rails/rack/logger.rb:20:in `call'
  actionpack (4.1.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.1.1) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
  rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
  railties (4.1.1) lib/rails/engine.rb:514:in `call'
  railties (4.1.1) lib/rails/application.rb:144:in `call'
  railties (4.1.1) lib/rails/railtie.rb:194:in `public_send'
  railties (4.1.1) lib/rails/railtie.rb:194:in `method_missing'
  /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.45/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
  /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.45/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
  /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.45/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
  /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.45/lib/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'

问题是什么,我该如何解决?


  • 在我的本地机器(开发模式)中我没有问题。
  • 我的远程机器运行 Ubuntu 12.04 LTS,Phusion Passenger 4.0.45, Apache 2.2.22。

【问题讨论】:

  • 你运行了 assets:precompile 吗?这将使应用程序可以访问已编译的文件,但它不会像 /public/logo.png 那样简单地放在 /public 中。您需要更改您的 production.rb 以允许提供静态资产
  • 另外,您能否检查一下assets.rb 的内容,因为 Capistrano 应该自行运行 assets:precompile 但它可能未配置为编译 png 图像
  • @Russell - 在远程机器上,我尝试运行RAILS_ENV=production bundle exec rake assets:precompile,但似乎没有任何反应。我应该如何更改production.rb 文件?
  • @Russell - 我的项目中没有assets.rb 文件。如何检查 Capistrano 是否成功执行了assets:precompile 命令?
  • 奇怪,assets.rb 文件应该位于config/initializers,如果它不在那里,它可能会解释为什么你的资产没有编译

标签: ruby-on-rails apache ruby-on-rails-4 permissions assets


【解决方案1】:

在生产中编译的所有资产都在文件名后附加了指纹 ID。因此,在生产中,logo.png 在技术上不再存在。现在应该存在的是 logo-SOME_FINGERPRINT_ID.png。在此处查看更多信息:

http://guides.rubyonrails.org/asset_pipeline.html#what-is-fingerprinting-and-why-should-i-care-questionmark

此外,如果您只想提供静态图像,则需要将其放在公用文件夹的 images 目录中。然后,您需要告诉 Apache 或 Nginx 从该位置提供静态资产。

编辑:链接到资产管道中的图像 -

link_to(LINK_TEXT_OR_IMAGE_TAG_HELPER, image_path(IMAGE_NAME))

Asset Url Helper

【讨论】:

  • 我应该如何声明image_tag 方法才能在我的应用程序或电子邮件中使用位于public/images/ 的静态图像?
  • 您不会因为image_tag 是资产助手。将东西放入 public/images/ 意味着它位于资产管道之外。
  • @user502052 是图像未显示在您的页面/电子邮件上,还是您无法在浏览器中直接路由到它们的实际问题?
  • 我应该在网页和电子邮件中都使用它。
  • @user502052 并没有真正回答这个问题。问题是图像没有显示在您的网页和/或电子邮件上,还是您无法直接路由到浏览器中的图像(即some.web.page/someimge.jpg
猜你喜欢
  • 2013-08-14
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
相关资源
最近更新 更多