2013-02-12 40 views
0

當我從我的應用程序目錄中rackup運行,它工作得很好:如何從根目錄之外安裝配置文件?

[email protected]:~/discourse$ rackup config.ru 
Flushing redis (development mode) 
/home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `block in require': iconv will be deprecated in the future, use String#encode instead. 
/home/walkraft/discourse/vendor/gems/message_bus/lib/message_bus.rb:130: warning: already initialized constant ENCODE_SITE_TOKEN 
>> Thin web server (v1.5.0 codename Knife) 
>> Maximum connections set to 1024 
>> Listening on 0.0.0.0:9292, CTRL+C to stop 

不過,如果我嘗試從這個目錄之外運行rackup:

[email protected]:~$ rackup discourse/config.ru 
/home/walkraft/discourse/config/application.rb:7:in `require': cannot load such file -- ./lib/discourse_plugin_registry (LoadError) 
     from /home/walkraft/discourse/config/application.rb:7:in `<top (required)>' 
     from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
     from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
     from /home/walkraft/discourse/config/environment.rb:2:in `<top (required)>' 
     from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
     from /home/walkraft/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
     from /home/walkraft/discourse/config.ru:2:in `block in <main>' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/builder.rb:51:in `instance_eval' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/builder.rb:51:in `initialize' 
     from /home/walkraft/discourse/config.ru:in `new' 
     from /home/walkraft/discourse/config.ru:in `<main>' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/builder.rb:40:in `eval' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/builder.rb:40:in `parse_file' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/server.rb:200:in `app' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/server.rb:304:in `wrapped_app' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/server.rb:254:in `start' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/lib/rack/server.rb:137:in `start' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/gems/rack-1.4.4/bin/rackup:4:in `<top (required)>' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/bin/rackup:19:in `load' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/bin/rackup:19:in `<main>' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `eval' 
     from /home/walkraft/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `<main>' 

如何運行rackup當我m不在根目錄內?

+0

你可以'cd到該目錄並運行'rackup' – 2013-02-12 12:48:35

+0

@SergioTulentsev:當然他們有一些選擇,所以你不這樣做? – Casebash 2013-02-12 12:54:58

+0

那麼,相對於當前目錄而言,你還能成功執行文件查找嗎?爲什麼你不能'cd',你能否詳細說明一下? – 2013-02-12 12:57:38

回答

1

其實,這不是rackup問題;這是你的代碼有問題。

你有

require './lib/discourse_plugin_registry' 

地方。這並不理想。它應該是這樣的:

require File.expand_path('../../lib/discourse_plugin_registry', __FILE__) 

你有它的方式,它採用了當前目錄明確,無論你做什麼rackup,直到你改變當前目錄 - 它不會工作。

5

如果不想手動cd的話語根文件夾,那麼爲什麼不只是增加一個固定的rackup config.ru文件:

# Insert as first line in config.ru 
Dir.chdir(File.dirname(File.expand_path(__FILE__))) 
相關問題