Как я могу отобразить изображение, путь которого находится за пределами моего каталога проекта Ruby on Rails, используя rails 3? - PullRequest
3 голосов
/ 26 февраля 2012

как отобразить изображение, которое хранится вне каталога проекта?

Есть ли простой способ сделать это?

Ответы [ 3 ]

9 голосов
/ 26 февраля 2012

вижу два пути:

  • На вашем сервере rails, в производственном, а иногда и в dev, вы должны использовать веб-сервер, такой как apache или nginx. С их помощью вы можете обслуживать файлы из других каталогов по конкретному URL. НАПРИМЕР. Вы можете http://yourapp.com/images/ обслуживать файлы из определенного каталога. В рельсах выведите изображение с традиционным image_tag

Пример с Nginx:

    # Find the right `server` section which you currently use to serve your rails app
server {
      listen 80;

      # Add this
      location /images {
        root /var/www/my/specific/folder;
      }

      location / {
        #...
        #... Here you should already some code to proxy to your rails server
      }
    }

With that, when you access to `yourserver.com/images`, nginx serve your specific folder and not your rails app. Then in your app view :

    <%= image_tag 'http://yourserver.com/images/my_pic.jpg' %>
  • Если вы не можете получить доступ к настройкам сервера, вы можете подать файл изображения из действия контроллера с помощью send_file

    В контроллере:

    class ImagesController < ApplicationController
      def show
        send_file File.join('/var/www/my/specific/folder',params[:name]), :disposition => 'inline'
      end
    end
    

    В config/routes.rb

    match '/images/:name' => 'images#show', :as => :custom_image
    

    Затем, когда вы получаете доступ к этому действию (по маршруту, который вы определили в config/routes.rb), у вас есть изображение. Таким образом, по вашему мнению, вы делаете традиционный image_tag с этим URL:

    <%= image_tag custom_image_path( 'my_pic.jpg' ) %>
    OR
    <%= image_tag custom_image_url( 'my_pic.jpg' ) %>
    
0 голосов
/ 26 февраля 2012

Это, вероятно, плохая идея и приведет к куче проблем. Некоторая безопасность, некоторая функциональность, но большинство эффектов, которых я на самом деле не знаю.
По своему опыту я знаю, что всякий раз, когда вы идете против рельсов соглашений о том, что и где находится, это скользкий путь разрушения, которого лучше избегать.

Создайте решение, используя предоставленную платформу.

Обратите внимание, что эта функциональность также может быть затронута, если вы используете rails 3.1+, а не <= 3.0 из-за компиляции ресурсов, которая копирует js, css и изображения в общедоступные. </p>

0 голосов
/ 26 февраля 2012

Если он хранится вне каталога приложения Rails, он не принадлежит конвейеру ресурсов, и вы можете просто сослаться на него:

<%= image_tag("http://example.com/some_file.jpg") %>

Очевидно, что он должен быть доступен через HTTP (вам нужно установить nginx или сервер Apache).

...