当我将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
答案 0 :(得分:1)
没有看到你的整个控制器,我无法确定,但我最近遇到了与OmniAuth类似的问题。以下是对我有用的两件事:
说明
虚拟主机在其中部署了两个应用程序,如下所示:
#/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>
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
我必须采取两个步骤来配置OmniAuth才能正常工作:
必须使用子目录设置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(/\/$/, '')}"
出于某种原因,在设置登录/注销链接时,指定的路线不起作用。我不得不硬编码<a href="/auth/<my-provider>">Click here to log in</a>
而不是使用<%= link_to "Click here to log in", signin_path %>
。我不知道为什么会这样,但你可以尝试一下。