Assets nginx

[code] server {
listen 8001;
server_name localhost;
root /home/test/ror/mongo/public; # <— be sure to point to ‘public’!
passenger_enabled on;

 location ~ ^/assets/ {
  expires 1y;
  add_header Cache-Control public;
  add_header ETag "";
   break;

}
}[/code]
na development assets działaja natomiast na produkcji mam problem ze skonfigurowaniem ich pod nginxa, moze ktos podpowiedzieć co robie żle?

co znaczy że nie działają?

przykład:

#d1 { background-image:url('photo1.jpg'); }
działa tylko na develop

OK, nadal nie wiem co znaczy ‘nie działa’ ale zakładam że jest to 404.

W trybie production, RoR nieserwuje domyślnie statycznych asetów. Możesz to ustawienie zmienić w config/environments/production ale będzie to znaczyło że podobnie jak przy developmencie, aplikacja będzie te assety mielić w czasie rzeczywistym, co może znacznie obciążyć i spowolnić Twój serwer.

Lepszym pomysłem jest prekompilowanie asetów podczas wdrożenia. Jeśli używasz capistrano, powinno być to bardzo proste.

Wszystko masz wyłożone jak na tacy tu: http://guides.rubyonrails.org/asset_pipeline.html

przerabiałem tego guida to z niego dodałem wpis do nginxa,
nie mam 404, background-image z przykładu jaki podałem nie odnajduje fizycznie pliku na produkcji photo1.jpg, po rake assets:precompile pliczek ten laduje natomiast do public/assets

#d1 { background-image:image-url('photo1.jpg'); }

[quote]2.3.2 CSS and Sass

When using the asset pipeline, paths to assets must be re-written and sass-rails provides -url and -path helpers (hyphenated in Sass, underscored in Ruby) for the following asset classes: image, font, video, audio, JavaScript and stylesheet.

image-url(“rails.png”) becomes url(/assets/rails.png)
image-path(“rails.png”) becomes “/assets/rails.png”.[/quote]

#d1 { background-image:url(/assets/photo1.jpg); }
bez efektu

[quote=mkornat88]#d1 { background-image:url(/assets/photo1.jpg); }
bez efektu[/quote]
to jest wynikowy css?

Assety powinny ci się przy deploymencie precompilować i wylądować w katalogu public/assets (zakładam, że zastosowałeś rady huberta).
Nazwy plików powinny zawierać hasha, np. photo1-34523jh45g32h45234523.jpg (helper ‘image-url’ doda tago hasha podczas precompilacji.)
Jeżeli jest u ciebie inaczej to przeklej część configa dotyczącą assetów.

nazwa pliku z public/assets po kompilacji:

photo1-bc959dbbcc3aea068706c84f2de1ab7d.jpg

application.rb

[code]require File.expand_path(’…/boot’, FILE)
require ‘rails/all’
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module Mongo
class Application < Rails::Application

config.encoding = "utf-8"
config.filter_parameters += [:password]
config.active_support.escape_html_entities_in_json = true
config.active_record.whitelist_attributes = true
config.assets.enabled = true
config.assets.version = '1.0'

end
end[/code]
production.rb

Mongo::Application.configure do #devise config.cache_classes = true config.consider_all_requests_local = false config.action_controller.perform_caching = true config.serve_static_assets = false config.assets.compress = true config.assets.compile = false config.assets.digest = true config.i18n.fallbacks = true config.active_support.deprecation = :notify end

Nie masz podanej ścieżki do assetsów w deklaracji lokacji w configu nginx

to nie wskazuje assets?

location ~ ^/assets/

Odnalazłem problem, plik po komilacji z haszem w public/assets nie miał nadanego prawa odczytu dla innych , po ręcznej korekcie praw działa. Czym jest spowodowane takie ograniczenie w nadawaniu praw przy kompilacji?

Możesz albo odpowiednie polecenie chmod dopisać do recepty capistrano, albo lepiej ustawić poprawnie umask.

Ustawienie umask dla użytkownika, np. na wartość 022 powinno spowodować że nowotworzone pliki zawsze będą miały uprawnienia 644, co prawdopodobnie jest pożądane.