2016-06-14 14 views
1

ボタンクリックで実行したいSinatraアプリケーション外のフォルダにRubyスクリプトがあります。Sinatraアプリケーションから外部Rubyスクリプトを実行する方法

これはapp.rbファイルです:

require 'sinatra' 

get '/' do 
    erb :home 
end 

get '/launch_script' do 
    system("ruby path\\to\\file\\delete_rows_csv.rb") 
end 

これはhome.erbファイルです:

<a href='/launch_script'> Launch a Script </a> 

私は、ファイルパスをロードするか、この作業を取得するためにファイルを要求することになっているだろうか?

require 'sinatra' 

get '/' do 
    erb :home 
end 

get '/launch_script' do 
    load 'path\\to\\file\\delete_rows_csv.rb' 
end 
+0

'ruby path/to/file'を使用しないでください。コードを実行するRubyインタプリタへの絶対パスを使用します。それがなければ、システムは環境PATHを検索してそれを見つけなければならず、PATHがRubyがどこにあるかを含まない場合、コマンドは失敗します。通常、サーバーは制限付きユーザーとして実行されるため、適切なパスはWebサーバーに設定されません。 –

+0

が合意しましたが、私の絶対パスを投稿しないために、私はそれを残しました。 – aronlmin

答えて

1

(あなたのファイルは、静的な場所に位置するか、またはこのファイルへの相対的なされている場合によっては)あなたはrequireまたはrequire_relativeを使用することができます。


この

はとてもうまくいったソリューションです。末尾に .rbを追加する必要もありません。

require 'sinatra' 

get '/' do 
    erb :home 
end 

get '/launch_script' do 
    require 'path\\to\\file\\delete_rows_csv' 
end 
+1

さらに、ロードが必要になり、rbを追加するとスムーズになりました – aronlmin

+0

ああ、私は完全に '' load''を忘れていました(フルネームが必要ですが、常にスクリプトを呼び出すことができます)。 –

関連する問題