答えて

9

私は二つの方法を参照してください。あなたのレールのサーバーの上に

  • を、生産で、時にはdev内には、ApacheやnginxのようなWebサーバを使用する必要があります。これらを使用すると、特定のURLのために他のディレクトリのファイルを提供することができます。例えば。特定のディレクトリからファイルを配信することができますhttp://yourapp.com/images/。あなたは、サーバーの設定にアクセスすることができない場合は、コントローラのアクションから画像ファイルを提供することができます

    # 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' %> 
    
    • :レールでは、nginxの持つ伝統image_tag

    例で画像を表示

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

    config/routes.rb

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

    あなたは(あなたがconfig/routes.rbで定義された経路を介して)このアクションにアクセスするときに、あなたがイメージを持っています。だからあなたのビューであなたはこのURLで伝統image_tagの操作を行います。

    <%= image_tag custom_image_path('my_pic.jpg') %> 
    OR 
    <%= image_tag custom_image_url('my_pic.jpg') %> 
    
+0

私の編集を参照してください。カスタム名前付きルートでどのように使用するかを示します。 –

+0

そして私は私の例に合うようにコントローラを編集しました... –

+0

AFAIK、いいえ。レール範囲内では、レールスタックに従わなければなりません。しかし、コントローラは30年代に作成されています...必要に応じて、他のコントローラ内でアクションを統合することができます。私はむしろ、最初の解決策を見てみることをお勧めします。今では開発者の中にアプリケーションの上にWebサーバーがない場合でも、プロダクションではそうなります。それは(Apache上で仮想ホストを作るか、nginxの新しいサーバを作る...) –

0

それは、それが資産パイプラインに属していないと、あなたは、単にそれにリンクすることができ、Railsのアプリのディレクトリの外に保存されている場合:

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

明らかにそれはHTTPを介してアクセス可能でなければなりません(あなたがnginxのまたはApacheが必要サーバーがインストールされています)。

+0

どのようにアプリケーションを本番環境で使用していますか?ポート80でMongrelを実行していますか? –

0

これはおそらく悪い考えであるとの問題の束につながります。いくつかのセキュリティ、いくつかの機能性、しかし私が実際に知らないエフェクトのほとんど。
は、私はあなたがレールに対してのものであり、それは壊すものの滑りやすい斜面何とため規則に行く時はいつでも、最高の回避という、経験から、知っています。

提供されているフレームワークを使用してソリューションを作成します。

js、css、およびイメージをパブリックにコピーするアセットのコンパイルにより、< = 3.0ではなく、レール3.1+を使用している場合、この機能は少しでも影響を受けることに注意してください。

関連する問題