铁路3 - 客运路径问题

时间:2010-12-25 05:33:44

标签: ruby-on-rails apache ubuntu passenger

我的应用程序在需要文件的任何控制器或模型上返回并出错。 通常我需要一个如下所示的文件。

require '/lib/position_mover'

我玩了一下它,如果我从下面的服务器的顶级目录中指定路径,它似乎有用。

require '/srv/www/testapp/lib/position_mover'

我想使用相对路径有很多原因。有人可以给我指点吗?

服务器配置:

  • Apache 2
  • Ubuntu 10.10
  • rails 3.0.3
  • ruby​​ 1.9.2p0
  • MySQL的

虚拟主机:

<VirtualHost 173.255.238.220>
    ServerName test.targesoft.com
    DocumentRoot /srv/www/testapp/public/
    <Directory /srv/www/testapp/public/>
        PassengerAppRoot /srv/www/testapp/
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

3 个答案:

答案 0 :(得分:1)

如果您需要Rails应用程序的lib目录中的文件,则没有必要。 Rails默认需要一切。

答案 1 :(得分:1)

您需要将此模块放在lib目录中,然后将其添加到config.autoload_paths文件中的config/application.rb(默认情况下,该设置已被注释掉)。当您在代码中引用此模块时,Rails将自动知道要求lib目录中的文件。

答案 2 :(得分:0)

感谢您的回复!虽然插件是lib文件夹的实际内容,但我实际上是在我自己的自定义模块中调用。我尝试从模型的顶部取出需要的部分,但除非我需要它作为我的文件的顶部,我得到一个未定义常量的错误。必须有一种方法来设置乘客,以便它默认情况下查看它自己的目录。

module PositionMover

  def move_to_position(new_position)
    max_position = self.class.where(position_scope).count
    # ensure new_position is an integer in 1..max_position
      unless new_position.nil?
        new_position = [[1, new_position.to_i].max, max_position].min
      end

      if position == new_position # do nothing
        return true
      elsif position.nil? 
        increment_items(new_position, 1000000)
      elsif new_position.nil? 
        decrement_items(position+1, 1000000)
      elsif new_position < position 
        increment_items(new_position, position-1)
      elsif new_position > position
        decrement_items(position+1, new_position)
      end
      return update_attribute(:position, new_position)
    end


   def position_scope
    "1=1" 
   end

   def increment_items(first, last)
     items = self.class.where(["position >= ? and position <= ? AND #{position_scope}", first, last])
     items.each {|i| i.update_attribute(:position, i.position + 1)}
   end


   def decrement_items(first, last)
      items = self.class.where(["position >= ? and position <= ? AND #{position_scope}", first, last])
      items.each {|i| i.update_attribute(:position, i.position - 1)}
    end


end