4

erb ファイルで画像を公開する前に、次のコードを使用してファイルの存在を確認しています。これは ruby​​/sinatra アプリであり、レールではありません。

<% @imagename = @place.name + ".jpg" %> 
<% if FileTest.exist?( "/Users/Tim/projects/game/public/" + @imagename ) %> 
<p><img src= '<%= @imagename %>' width="400" height="300" /> </p> 
<% end %> 

これを Heroku に公開すると、明らかに機能しません。

相対パスを使用してみましたが、動作させることができません:

<% if FileTest.exist?( "/" + @imagename ) %> 
4

2 に答える 2

9

a で始まるパス/は相対パスではなく、絶対パスです。ルートに移動してから、次のパスに移動します

最初のステップは、アプリがどこから実行されているかを確認することです。つまり、現在のディレクトリは何ですか。これを行うには、一時的に<%= Dir.pwd %>ビューに入れ、ローカルと Heroku の両方でこれを試して、2 つの環境を比較します。

次に、このフォルダーから画像への相対パスを試してください。たとえば、アプリが実行されている場合、/Users/Tim/projects/gameパブリックへの相対パスはpublic、画像へのパスがFile.join('public', @imagename)

さらにサポートが必要な場合はDir.pwd、両方の環境からの値を投稿してください


別のアプローチを次に示します。

__FILE__現在のファイルへの相対パスを与える特殊な Ruby 変数です。

それを利用して、アプリを起動する .rb ファイルで次のように定数を設定します。

APP_ROOT = File.dirname(__FILE__)

(アプリの config.rb の同様の行はRAILS_ROOT、Rails アプリで設定するために使用されます)

次に、ビューで次を使用できます。

FileTest.exist?(File.join(APP_ROOT, 'public', @imagename))
于 2010-05-11T20:47:45.267 に答える
0

あなたが望むのはRAILS_ROOT定数を使用することです - それはあなたのアプリのフォルダを指します。したがって、ローカル マシンでRAILS_ROOTは と評価され/Users/Tim/projects/game/ます。

これは Rails 固有のものFile.dirname(__FILE__)です。代わりに使用してください。

于 2010-05-11T20:48:05.437 に答える