额外的目录在我的生产线前面 [英] Extra directory prepended to my routes in production

查看:112
本文介绍了额外的目录在我的生产线前面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的导轨应用程序在本地工作正常,似乎正常部署。根路线带您到我的欢迎页面。我有一个链接到我的组织模型的索引,由以下代码生成:

 <%= link_to (Organizations,organizations_path,:class =>button_blue)%> 

当我尝试点击由a2主机托管的生产服务器上的链接时,我得到以下错误:

 开始GET/database/organizations.shtml为11.222.33.444在星期六10月05 00 00:10:35  - 0400 2013 

ActionController :: RoutingError(无路由匹配[GET]/database/organizations.shtml):
actionpack(3.2.13)lib / action_dispatch / middleware / debug_exceptions.rb :21:在`call'
...

为什么要尝试 /数据库/组织而不是像开发中的/组织地址栏中的网址显示 http://database.mysite.com/organizations 。这是否与网站位于子站点database.mysite.com有关?我如何解决这个问题,因为我的rails应用程序不能使用主域名?



对于什么是值得的,这里是当我运行

  RAILS_ENV =生产包exec rake路由| grep organization 

在服务器上:

 组织GET /organizations(.:format)组织#index 
POST /organizations(.:format)组织#创建
new_organization GET /organizations/new(.:format )组织#新
编辑组织GET /organizations/:id/edit(.:format)组织#编辑
组织GET /organizations/:id(.:format)组织#显示
PUT / organization /:id(。:format)组织#update
DELETE /organizations/:id(.:format)组织#destroy

这是我的routes.rb:

  MyApp :: Applicati on.routes.draw do 

root:to => 'application#index'

resources:grantmakers,:grant_records,:events,:organizations

end

这是我的配置/环境/ production.rb:

  MyApp: :Application.configure do 
#这里指定的设置将优先于config / application.rb

#代码在请求之间不重新加载$ ​​b $ b config.cache_classes = true

#全部错误报告已禁用并缓存已启用
config.consider_all_requests_local = false
config.action_controller.perform_caching = true

#禁用Rails的静态资产服务器(Apache或nginx已经这样做)
config.serve_static_assets = false

#压缩JavaScript和CSS
config.assets.compress = true

#如果未编译预编译的资产,不要回退到资产管道
config.assets.compile = true

#生成资产摘要摘要
config.assets.digest = true

#默认为nil并保存在config.assets.prefix指定的位置
#config.assets.manifest = YOUR_PATH

#指定您的服务器用于发送文件的标题
#config.action_dispatch.x_sendfile_header =apache $的X-Sendfile#
#config.action_dispatch.x_sendfile_header ='X-Accel-Redirect '#for nginx

#强制通过SSL对应用程序的所有访问,使用严格传输安全性,并使用安全Cookie。
#config.force_ssl = true

#查看日志中的所有内容(默认为:info)
#config.log_level =:debug

#使用以下标签预处理所有日志行
#config.log_tags = [:subdomain,:uuid]

#为分布式设置使用其他记录器
#config.logger = ActiveSupport :: TaggedLogging.new(SyslogLogger.new)

#在生产中使用不同的缓存存储
#config.cache_store =:mem_cache_store

#启用图像服务,样式表和JavaScript从资产服务器
#config.action_controller.asset_host =http://assets.example.com

#预编译其他资产(application.js,application。 css,所有非JS / CSS都已经添加)
#config.assets.precompile + =%w(search.js)

#禁用传递错误,坏的电子邮件地址将忽略
#config.action_mailer.raise_delivery_errors = false

#启用线程模式
#confi g.threadsafe!

#启用I18n的区域设置回退(使任何区域设置的查找都可以回到
#找不到翻译时的I18n.default_locale)
config.i18n.fallbacks = true

#向注册的监听器发送弃用通知
config.active_support.deprecation =:通知

#记录查询计划以获取更多(作品
#与SQLite,MySQL和PostgreSQL)
#config.active_record.auto_explain_threshold_in_seconds = 0.5
end

这里是我的application_controller.rb:

  class ApplicationController< ActionController :: Base 
protect_from_forgery

def index
end

before_filter:basic_http_authentication

private

def basic_http_authentication
如果Rails.env.production?
authenticate_or_request_with_http_basic do |用户名,密码|
username =='---'&&&密码=='---'
end
end
end
end

非常感谢您的帮助。

解决方案

感谢@phoet,我终于确定了问题,找到一个解决方案。



我的Apache服务器正在重写URL,原因是我仍然不明白。我认为这可能与A2主机允许您设置子域的方式有关。在任何情况下,将以下行添加到子域的根目录中.htaccess文件的末尾解决了问题:

  RewriteEngine关闭

这只是禁用所有重写: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine


My rails application works fine locally, and seems to deploy normally. The root route brings you to my welcome splash page. I have a link on that page to the index for my organizations model, generated by the following code:

<%= link_to("Organizations", organizations_path, :class => "button_blue") %>

When I try to click that link on the production server, hosted by a2 hosting, I get the following error:

Started GET "/database/organizations.shtml" for 11.222.33.444 at Sat Oct 05 00:10:35 -0400 2013

ActionController::RoutingError (No route matches [GET] "/database/organizations.shtml"):
  actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  ...

Why is it trying to get "/database/organizations" instead of "/organizations" like it does in development? The url in the address bar reads "http://database.mysite.com/organizations". Does it have something to do with the fact that the site is located at the subdomain database.mysite.com? How do I get around this, since I can't use the primary domain for my rails app?

For what it's worth, here's what I get when I run

RAILS_ENV=production bundle exec rake routes | grep organization

on the server:

                  organizations GET    /organizations(.:format)                            organizations#index
                                POST   /organizations(.:format)                            organizations#create
               new_organization GET    /organizations/new(.:format)                        organizations#new
              edit_organization GET    /organizations/:id/edit(.:format)                   organizations#edit
                   organization GET    /organizations/:id(.:format)                        organizations#show
                                PUT    /organizations/:id(.:format)                        organizations#update
                                DELETE /organizations/:id(.:format)                        organizations#destroy

Here is my routes.rb:

MyApp::Application.routes.draw do

  root :to => 'application#index'

  resources :grantmakers, :grant_records, :events, :organizations

end

Here is my config/environments/production.rb:

MyApp::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # Code is not reloaded between requests
  config.cache_classes = true

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = false

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = true

  # Generate digests for assets URLs
  config.assets.digest = true

  # Defaults to nil and saved in location specified by config.assets.prefix
  # config.assets.manifest = YOUR_PATH

  # Specifies the header that your server uses for sending files
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # See everything in the log (default is :info)
  # config.log_level = :debug

  # Prepend all log lines with the following tags
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server
  # config.action_controller.asset_host = "http://assets.example.com"

  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
  # config.assets.precompile += %w( search.js )

  # Disable delivery errors, bad email addresses will be ignored
  # config.action_mailer.raise_delivery_errors = false

  # Enable threaded mode
  # config.threadsafe!

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners
  config.active_support.deprecation = :notify

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  # config.active_record.auto_explain_threshold_in_seconds = 0.5
end

And here is my application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery

  def index
  end

  before_filter :basic_http_authentication

  private

  def basic_http_authentication
    if Rails.env.production?
      authenticate_or_request_with_http_basic do |username, password|
        username == '---' && password == '---'
      end
    end
  end
end

Thanks very much for your help.

解决方案

Thanks to @phoet, I finally identified the problem and found a solution.

My Apache server was rewriting the URLs for some reason that I still don't understand. I think it might have to do with the way A2 hosting allows you to set up subdomains. In any case, adding the following line to the end of the .htaccess file in the subdomain's root directory solved the problem:

RewriteEngine Off

This simply disables all rewriting: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine

这篇关于额外的目录在我的生产线前面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆