繁体   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