rails omniauth和base uri view问题

时间:2011-06-21 18:36:37

标签: ruby-on-rails routes omniauth

当我将rails应用程序部署到生产环境时,我设置了:RailsBaseURI / my_app,以便我可以: mydomain.com/my_app作为我的rails应用程序的位置。我已将omniauth设置为我的身份验证提供程序。问题是,当它调用我的会话控制器的注册操作时,我收到以下错误:

ActionView::MissingTemplate (Missing template /m_app/services/signup with 
{:handlers=>[:rjs, :rhtml, :rxml, :builder, :erb], :locale=>[:en, :en], 
:formats=>[:html]} in view paths
"/home/webadmin/mydomain.com/my_app/releases/20110621181033/app/views", 
"/home/webadmin/mydomain.com/my_app/releases/20110621181033", "/"):
          app/controllers/services_controller.rb:128:in `create'

services_controller的第128行看起来像:

render signup_services_path

我的服务控制器路由如下:

  resources :services, :only => [:index, :create, :destroy] do
    collection do
      get 'signin'
      get 'signout'
      get 'signup'
      post 'newaccount'
      get 'failure'
    end
  end

1 个答案:

答案 0 :(得分:1)

没有看到你的整个控制器,我无法确定,但我最近遇到了与OmniAuth类似的问题。以下是对我有用的两件事:

说明

  1. internalserver.com有一个虚拟主机。
  2. 虚拟主机在其中部署了两个应用程序,如下所示:

    #/etc/httpd/conf.d/ssl.conf
    <VirtualHost _default_:443>
        ServerName internalserver.com:443
        DocumentRoot /var/www/html/sites
        <Directory /var/www/html/sites>
            AllowOverride all
            Options -Multiviews
        </Directory>
    
        # Stable App
        <Directory /var/www/html/sites/stable>
            RailsBaseURI /stable
            RackBaseURI /stable
            Options -MultiViews
            RailsEnv production
        </Directory>
    
        # Beta App
        <Directory /var/www/html/sites/beta>
            RailsBaseURI /beta
            RackBaseURI /beta
            Options -MultiViews
            RailsEnv development
        </Directory>
    
        # SSLStuff
            ...
    </VirtualHost>
    
  3. ls -al /var/www/html/sites的输出:

    drwxr-xr-x. 14 apache apache   4096 Feb  6 19:05 app
    drwxr-xr-x. 14 apache apache   4096 Feb  9 18:15 app_beta
    lrwxrwxrwx.  1 root   root       32 Feb  6 00:00 beta -> /var/www/html/sites/app_beta/public
    lrwxrwxrwx.  1 root   root       32 Feb  6 00:00 stable -> /var/www/html/sites/app/public
    
  4. 我必须采取两个步骤来配置OmniAuth才能正常工作:

    1. 必须使用子目录设置OmniAuth.config.full_host设置:

      #config/initializers/omniauth.rb
      Rails.application.config.middleware.use OmniAuth::Builder do
          ...
      end
      
      # Add this line
      OmniAuth.config.full_host = "https://internalserver.com/beta"
      
      # You could also do something dynamic like:
      # OmniAuth.config.full_host = "#{Settings.host.base_url.gsub(/\/$/, '')}"
      
    2. 出于某种原因,在设置登录/注销链接时,指定的路线不起作用。我不得不硬编码<a href="/auth/<my-provider>">Click here to log in</a>而不是使用<%= link_to "Click here to log in", signin_path %>。我不知道为什么会这样,但你可以尝试一下。