Cześć,
# config/initializers/paperclip.rb
Paperclip.options[:image_magick_path] = '/opt/local/bin'
Jak to uzależnić od środowiska? Na serwerze produkcyjnym, imagemagick jest w innym miejscu…
Cześć,
# config/initializers/paperclip.rb
Paperclip.options[:image_magick_path] = '/opt/local/bin'
Jak to uzależnić od środowiska? Na serwerze produkcyjnym, imagemagick jest w innym miejscu…
ifem lub hashem konfiguracyjnym (klucze == nazwa środowiska) lub tablica możliwych ścieżek i ich przeszukanie lub…
ja mam tak:
Paperclip.options[:image_magick_path] = “/usr/local/bin” if Rails.env == “production”
wywolaj komende systemowa
np:
$whereis convert
odpowiedz bedzie mniej wiecej taka
convert: /usr/bin/convert /usr/share/man/man1/convert.1.bz2
wybierasz z tego 2 czesc, jakis regexp i masz zawsze poprawne
to tylko przyklad oczywsci ale idea chyba ok?
A czy w takim przypadku:
class Jewel < ActiveRecord::Base
has_attached_file :image, :styles => { :small => "150x150>", :medium => "400x400" },
:url => "http://static.foobars.com/jewels/:id/:style/:basename.:extension",
:path => "/home/zmali/www/imgs/jewels/:id/:style/:basename.:extension"
:url i :path powinny być ustawiane tu w klasie modelu z ifem (w zależności od środowiska), czy w plikach environments/*.rb jako jakaś stała (pole Paperclipa?)?
Wiadomo, że różni się dla produkcji i serwera deweloperskiego…
[quote=zmaliszewska]
class Jewel < ActiveRecord::Base
has_attached_file :image, :styles => { :small => "150x150>", :medium => "400x400" },
:url => "http://static.foobars.com/jewels/:id/:style/:basename.:extension",
:path => "/home/zmali/www/imgs/jewels/:id/:style/:basename.:extension"
:url i :path powinny być ustawiane tu w klasie modelu z ifem (w zależności od środowiska), czy w plikach environments/*.rb jako jakaś stała (pole Paperclipa?)?
Wiadomo, że różni się dla produkcji i serwera deweloperskiego…[/quote]
Użyj App (http://github.com/bragi/app/). W pliku config/app.yml zdefiniuj odpowiednie wpisy:
development:
paperclip_path: "/home/zmali/www/imgs/jewels/:id/:style/:basename.:extension"
production:
paperclip_path: "/var/www/rails/app/imgs/jewels/:id/:style/:basename.:extension"
i użyj ich w aplikacji:
class Jewel < ActiveRecord::Base
has_attached_file :image, :styles => { :small => "150x150>", :medium => "400x400" },
:url => "http://static.foobars.com/jewels/:id/:style/:basename.:extension",
:path => App.paperclip_path
Zacznij używać google, skuteczne rozwiązania znajdziesz również na http://ruby-toolbox.com/.
Staraj się też nie używać zwrotu Wiadomo, że…, co w slangu akademickim oznacza dla mnie jest to oczywiste, więc dla innych z pewnością też (i nie chce mi się sprawdzić czy się nie mylę).
Dzięki, to rozwiązuje problem. Czy nie da się definiować tego jednak w plikach environment/*.rb ? Wydaje mi się to bardziej naturalne.
Może postawię pytanie trochę inaczej: jak z poziomu modelu dostać się do:
config.action_controller.perform_caching = true
które jest zdefiniowane w pliku config/environments/development.rb, czy jest w ogóle taka możliwość?
Co do Google - to używam
Wiadomo, że… w slangu akademickim to dla mnie raczej podobno tak jest, nie wiem do końca, i nie było czasu sprawdzić…. Jednak to już off-topic. A tutaj obracamy się w kręgu porządnych programistów, przynajmniej ja kieruję swoje posty do takich więc zdaje mi się, że pewne założenia mogę poczynić - tym bardziej, że akurat mam pewność do tego co piszę. Dodatkowo w moim zdaniu zabrakło podmiotu Wiadomo, że ten url różni się dla produkcji i serwera deweloperskiego… - i może to zmieniło za bardzo sens zdania. Jeszcze się nad tym zastanowię - dzięki, że napisałeś co Ty o tym myślisz.
To jest złe rozwiązanie, bo zakłada, że na komputerze developerskim nie uruchomisz środowiska production. A robi się to często podczas testowania cache na przykład.
environment/*.rb służą do określenia środowisk, trzyma się je w repozytorium.
Plik app.yml każdy ma swój, osobny jest też dla serwerów produkcyjnych. W repozytorium trzyma się tylko przykładowy plik app.yml.example, który generator app umie wykorzystać.
Nie napiszę, że się nie zgadzam, bo nie do końca rozumiem co masz na myśli, ale zdefiniowanie stałych:
PAPERCLIP_BASE_PATH = "http://static.foobars.com/"
PAPERCLIP_BASE_URL = "/home/httpd/apps/"
różnych dla plików production.rb i development.rb powoduje, że w modelu mogę zdefiniować:
class Jewel < ActiveRecord::Base
has_attached_file :image, :styles => { :small => "150x150>", :medium => "400x400" },
:url => "#{PAPERCLIP_BASE_URL}jewels/:id/:style/:basename.:extension",
:path => "#{PAPERCLIP_BASE_PATH}/imgs/jewels/:id/:style/:basename.:extension"
co działa tak jak chcę i wydaje mi się dobrym podejściem.
Jeżeli zmienię sobie ENV na serwerze deweloperskim na “production” to zmienne te zostaną odczytane z config/environments/production.rb…
Czy takie podejście jest złe???
Jest o tyle nie-cool, że inny deweloper z twojego zespołu może nie mieć (raczej nie będzie miał) katalogu
#PAPERCLIP_BASE_URL = "/home/httpd/apps/"
A to właśnie wciśniesz mu w gardło wpisując tę linijkę do ŚRODOWISKO.rb, który jest trzymany w repozytorium i tym samym wspólny dla wszystkich. I to właśnie chodziło Bragiemu.
Tak samo jak nie trzymasz w repo database.yml, tak samo ów application.yml sobie dodasz do svn/git ignore’a i będzie grało
Dobra, rozumiem ale idąc tym tropem, czemu nie mogę stworzyć environments/development.rb.example i dać ignore’a na environments/development.rb??
Może to wynika z konwencji? Dobrych praktyk? Nie wiem o tym…
Swoją drogą database.yml trzymam w repo… Ale już nie będę. Jeszcze jakieś pliki poiwnny być ignorowane?
Konwencja jest taka, że plików z kodem – czyli .rb własnie – generalnie się nie ignoruje tylko grzecznie je trzyma w repo.
Natomiast pliki czysto konfiguracyjne – w świecie railsów głównie .yml – jak najbardziej się dodaje do ignore jeśli jest szansa/ryzyko, że konfiguracja może być inna na innej maszynie.