簡體   English   中英

Site5上乘客中的Rails 3沒有資產正在加載

[英]Rails 3 in Passenger on Site5 no assets are loading

我在Rails 4中編寫了一個應用程序,並通過Site5進行了托管,Site5與許多其他人一樣僅在Phusion Passenger中使用Rails 3.2和Ruby 1.8.7。

我一直在緩慢地重新編碼站點以使其符合這些古老的要求,但在資產管道方面卻遇到了障礙。 我的css,javascript或圖像都沒有顯示,因為資產文件夾不在公用文件夾中。

我正在使用HAML,SASS和CoffeeScript,因此需要對我的資產進行編譯。 我的應用程序的原始結構如下所示:

- app
|- assets
||- images
||- javascripts
||- stylesheets
...
- public
|- .htaccess
|- assets

盡管我的鏈接和文本出現了,但是我沒有得到任何圖像,JavaScript,樣式表等。通過與Site5進行的許多無用的技術支持會議(他們對Rails完全一無所知),我意識到我可能必須重組應用程序,因為所有Apache或Passenger都希望在public_html文件夾中擁有資產。 因此,我嘗試將資產自動鏈接到公用文件夾無濟於事。 然后我像這樣復制它們:

- app
|- assets
||- images
||- javascripts
||- stylesheets
...
- public
|- .htaccess
|- assets
|- images
|- javascripts
|- stylesheets

現在,我的圖像出現了,但是沒有任何樣式,javascript,什么也沒有。 我試過跑步

RAILS_ENV=production bundle exec rake assets:precompile

我看過許多有關乘客和鐵路的文章,但似乎沒有給出有關資產的答案。 我也閱讀了很多有關Rails資產管道的信息,但是就乘客而言,這似乎並沒有提供任何見識。

我真的很困惑,也感到非常沮喪,因為似乎Dreamhost和Site5都在舊版本的Rails上運行,因此更多的人會在對該站點進行編碼之前意識到它們的版本太新了。

任何幫助將是有用的。

這個問題是有點老了,但最近我遇到了同樣問題。 這里的區別是我在Bluehost上而不是Site5上。 在這里,我將介紹使它起作用的選項,這些都是我在我的測試中最終解決的問題。

在尋找此問題時,在建議中看到的第一件事是,在/config/environments/production.rb應該是

config.serve_static_assets = false 

這是默認選項。 在此之前,我將其設置為true ,這是它可以工作的唯一方法,但是Rails會編譯資產,並且會嚴重影響性能。

然后,為了使情況正確,我將其保留為默認值,即false ,但未加載任何圖像,樣式表或javascript。 這是一個老式的基於文本的頁面,不好。

這些資源在我的public / assets文件夾中是正確的,並且在頁面上看到鏈接是正確的,即生成的HTML正在尋找正確的編譯文件。 檢查您的public/assets/manifest.yml ,並將其與您的渲染純文本頁面上的鏈接進行比較。 使用Firebug,我看到了一件有趣的事情:

加載資產會返回404錯誤!

而不是我的application.css ,正在加載的是404頁面! 這給了我暗示Apache無法訪問我的public / assets文件夾。

為了解決我所做的就是將我的public_html/myapp文件夾鏈接到我的Rails應用程序資產文件夾,例如:

ln -s /home2/my_dir_at_bluehost/rails/app_at_bluehost/public/assets /home2/my_dir_at_bluehost/public_html/app_at_bluehost/assets

終於奏效了。 波紋管是與Bluehost上的.htaccess一起使用的.htaccess:

<IfModule mod_passenger.c>
Options -MultiViews
PassengerResolveSymlinksInDocumentRoot on
RailsEnv production
RackBaseURI /
PassengerAppRoot /home2/my_dir_at_bluehost/rails/app_at_bluehost
SetEnv GEM_HOME /home2/my_dir_at_bluehost/ruby/gems
</IfModule>

總結一下:

  1. 檢查config.serve_static_assets = false
  2. 檢查頁面是否顯示指向已編譯資產的正確鏈接
  3. 使用Firebug檢查正在加載的CSS的內容是什么,如果是404頁面,只需將資產文件夾鏈接到您的public_html文件夾。

他們甚至告訴我,如果我希望我可以使用VPS,那就是在共享主機上無法進行全局配置,就連在Bluehost上與Bluehost上的支持聯系都不能令人滿意。 但這最終只是一個簡單的軟鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM