2012-09-15 62 views
0

我有一個相當簡單的應用程序,在本地正常工作,使用正確的路線,即:大多數應用程序的/ conf /路線路線和適用於該模塊的路線的/ module/securesocial/conf。Playv2.0.3:SecureSocial模塊在推送到heroku後使用(而不是主要路線)

但是,一旦我發佈到heroku,只使用安全社會路由,所以我收到錯誤消息「Action not Found For request GET /」< - 或標準路由文件中定義的任何路由。

當我試圖操縱路徑(例如創建一個全面的路由文件),我得到了很多不同的編譯錯誤...

這裏是我的標準路線:

# Routes 
# This file defines all application routes (Higher priority routes first) 
# ~~~~ 

# Home page 
GET /       controllers.Application.index() 
GET  /foo      controllers.Application.index() 

GET  /admin      controllers.Application.admin() 

POST /quote      controllers.Application.addQuote() 

GET  /quotes      controllers.Application.getQuotes() 

# Login page 
GET  /login      securesocial.controllers.LoginPage.login 
GET  /logout      securesocial.controllers.LoginPage.logout 

# User Registration 
GET  /signup      securesocial.controllers.Registration.signUp 
POST /signup      securesocial.controllers.Registration.handleSignUp 

# Providers entry points 
GET  /authenticate/:provider  securesocial.controllers.LoginPage.authenticate(provider) 
POST /authenticate/:provider  securesocial.controllers.LoginPage.authenticateByPost(provider) 


# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

這裏是我的/ securesocial/conf目錄/路由文件:

# Routes 
# This file defines all application routes (Higher priority routes first) 
# ~~~~ 

# Home page 
# GET /       controllers.Application.index 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

# Login page 
GET  /login      securesocial.controllers.LoginPage.login 
GET  /logout      securesocial.controllers.LoginPage.logout 

# User Registration 
GET  /signup      securesocial.controllers.Registration.signUp 
POST /signup      securesocial.controllers.Registration.handleSignUp 

GET  /authenticate/:provider  securesocial.controllers.LoginPage.authenticate(provider) 
POST /authenticate/:provider  securesocial.controllers.LoginPage.authenticateByPost(provider) 

我知道有一些重複,但我這是我用來獲取本地安裝工作的配置(和它類似於在securesocial distro中提供的樣本)...

如果你能發現我做錯了什麼,我肯定會從課程更正中受益。

感謝, 芯片

+0

我聽說過這個bug,針對2.1版本發佈。 https://groups.google.com/forum/?fromgroups=#!searchin/play-framework/jorge/play-framework/OVjVmUFj9Mg/TwV8Sz5o4J4J – castlechip

回答

0

有非常簡單的解決方案:合併來自SecureSocial路由到您的應用程序的conf/routes

+0

但它們已經合併 ​​- SS conf中的每個路由都可以被發現在主要的conf。這在當地很好。但是一旦推到heroku上,這些路由就會被ss路由覆蓋,這些路由沒有範圍來查看主conf中的路由,所以像「/」這樣的簡單路由不會被加載(返回操作未找到)。試圖欺騙ss conf文件也不起作用,因爲放置頁面如/或/ foo會提示編譯或推送錯誤。 – castlechip

+0

SS路由文件是一個敏感的配置 - 注意第一個GET /被註釋掉 - 如果我刪除了這個註釋,或者註釋掉/ login,系統將無法編譯。 – castlechip

+0

類似地,從主conf註釋掉登錄或註銷也會提示編譯器退出。貶低這個奇怪的配置本地工作,然後覆蓋推。 – castlechip

0

我修改了SecureSocial的工作方式,以解決Play 2中的錯誤,使得子模塊中的路由覆蓋主應用中的路由。

這個新版本並不要求您將模塊代碼複製到您的應用程序中,而是將其作爲可下載的依賴項。

試試這個:

  1. 從目錄結構中刪除模塊代碼。
  2. 更改您的Build.scala文件以包含以下依賴性:「securesocial」%securesocial_2.9.1「%」2.0.5「。
  3. 添加一個新的解析器作爲設置的一部分:resolvers + = Resolver.url(「SecureSocial Repository」,url(「http://securesocial.ws/repository/releases/」))(Resolver.ivyStylePatterns)。

這是怎麼看起來像一個例子:

val appDependencies = Seq(
    // 
    // your other dependencies 
    // 
    "securesocial" % "securesocial_2.9.1" % "2.0.5" 
) 
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += Resolver.url("SecureSocial Repository", url("http://securesocial.ws/repository/releases/"))(Resolver.ivyStylePatterns) 
) 

希望它能幫助。