Рейл 3 - Пассажирский путь Выпуск - PullRequest
0 голосов
/ 25 декабря 2010

Мое приложение возвращает сообщение об ошибке на любом контроллере или модели, для которых требуется файл. обычно мне требуется файл, как показано ниже.

require '/lib/position_mover'

Я немного поиграл с этим, и, похоже, он сработает, если я укажу путь из верхнего каталога моего сервера, показанного ниже.

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

Я хочу использовать относительный путь по многим причинам. Может ли кто-нибудь дать мне направление на это?

Конфигурация сервера:

  • Apache 2
  • Ubuntu 10.10
  • рельсы 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 ]

1 голос
/ 27 декабря 2010

Вы захотите поместить этот модуль в каталог lib, а затем добавить его в config.autoload_paths в файле config/application.rb (настройка, которая по умолчанию закомментирована).Когда вы ссылаетесь на этот модуль в своем коде, Rails автоматически узнает, требуется ли файл в каталоге lib.

1 голос
/ 25 декабря 2010

Если вам требуется файл в каталоге lib приложения Rails, в этом нет необходимости.Rails требует, чтобы там все было по умолчанию.

0 голосов
/ 27 декабря 2010

Спасибо за ответ! В то время как плагины являются дефактом для папки 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
...