2012-09-25 40 views
1

我的Ruby on Rails應用程序爲每個用戶的公共頁面都有一個子域URL。例如。 username.xyz.com創建指向不同子域URL的Facebook頁面

我想在Rails的用戶Facebook頁面上發佈這個URL。

到目前爲止,我已經創建了一個Facebook應用程序,並將其設置爲Page Tab和URL。

我正在使用fbgraph gem在Facebook頁面上設置此應用程序。 (本頁面將用戶創建,並在此頁面的管理員訪問權限。)

我用這個代碼:

user = FbGraph::User.me("USER_TOKEN") 
account = user.accounts.select {|account| account if account.name == "PageName"}.first 
page = FbGraph::Page.new(account.identifier).fetch(:access_token =>"Access_token",:fields => :access_token) 
tab = page.tab!(:app_id => "APP_ID_I_CREATED") 

使用此代碼,每個用戶的頁面指向的URL在APP的定義頁面標籤網址。

我希望每個用戶的頁面指向自己的子域網址(例如:user1.xyz.com)

什麼我需要做的,實現這一目標?

+0

- 我一直在研究rubygem來抽象這種設計模式。它還沒有完成,但它已經過全面測試,所以如果你覺得自己有貢獻,應該很容易弄清楚到目前爲止發生了什麼。目前大約有75%完成了,但我很快就會解決它。它位於http://github.com/switchrails/blotter(自述文件已過時)。 – lightyrs

回答

0

該子域不是由網絡服務器處理,它由DNS處理。因此,首先您需要使用DNS將everyuser.xyz.com路由到您的Web服務器所在的IP地址。

DNS的工作方式,你可能必須爲每個用戶都有一個DNS條目。您可能能夠在創建用戶時找到添加DNS子域的API。

不要問我如何做到這一點,因爲我不知道,也沒有興趣研究它。

您還必須讓Web應用程序接受請求,並且@lightyrs對如何執行該操作有很好的描述。

+0

我認爲你的頭是在正確的地方,但我認爲這種方法是不必要的複雜。所有需要的是在重定向到適當子域的標籤URL處有一個控制器操作。 Facebook提供了一個'signed_request',您可以在服務器上解碼,這會爲您提供有關請求和請求用戶的各種元數據。 – lightyrs

+0

我不確定你是否在這個時候拖曳我,但我不明白我的99%肯定是正確的答案downvote。 – lightyrs

+0

你對這個問題的看法是錯的馬林。我們正在討論Facebook頁面標籤應用程序。沒有在瀏覽器中輸入URL。這是在請求某個頁面選項卡時由Facebook在幕後獲取的url。 – lightyrs

0

你可以做到以下幾點:

編輯:使所有的這些user.mywebsite.com子域名解析爲相同的URL。在該網址:

  1. 創建一個全面處理路線,該路線將處理源自*.facebook.com的所有流量。
  2. 將該路由指向解碼params[:signed_request]的控制器操作。
  3. 已解碼的簽名請求將生成負責請求的頁面的Facebook標識。
  4. 從您的系統中獲取相關頁面管理員的用戶。
  5. 獲取用戶的子域名。
  6. 重定向到子域。

目前,這是解決這個問題最常用的方法,但是,我希望將來能夠看到來自Facebook的解決方案,它允許我們在頁面上擁有某種動態選項卡網址,用戶和推薦上下文。

+0

通常,瀏覽器通過綁定到DNS的統一資源定位器或URL連接到Web服務器。 – lightyrs

+0

我只是說,這是一個很好的描述,瞭解如何讓RoR Web應用程序在收到http請求後接受它,但是user1.xyz.com URL不會在沒有DNS路由的情況下進入RoR Web服務器它在那裏。 –