【问题标题】:Edit rails app in production在生产中编辑 Rails 应用程序
【发布时间】:2012-12-05 19:10:15
【问题描述】:

希望您能提供帮助。我继承了 Rails 中的一个小站点,我的任务是对其进行编辑。我对 PHP 有很好的了解,但我完全是 Rails 的新手。

我需要对文件进行非常简单的编辑,我已经完成了,但是保存时它没有显示在网站上。该文件位于配置目录中。我已经重新启动了提供服务的机器(Mac OS 10.8),我在网上搜索了许多答案,包括禁用缓存、将 config.cache_classes 更改为 false 和 config.consider_all_requests_local 为 true,但似乎没有任何效果。该站点使用独角兽作为服务器。

我错过了什么?我意识到这可能是使用 rails 的一种糟糕的方式,我已经向自己保证我会学习它,但现在我只需要知道如何进行实时更改,因为我习惯于使用 html、php 等进行 FTP 更改。

谢谢你的期待!

【问题讨论】:

    标签: ruby-on-rails macos edit osx-mountain-lion production-environment


    【解决方案1】:

    如果您重新启动了提供服务的机器,但更改仍未显示出来,那么您完全编辑了错误的文件。也许它真的是从这台机器上的另一个文件夹中提供的?还是来自另一台机器?

    【讨论】:

    • 您好,谢谢。我正在编辑的文件位于 config 文件夹中,位于名为 initializers 的子文件夹中。该文件很简单,只有三个单独的 if 语句来处理调度某些操作。我只更改了安排这些操作的时间间隔。它肯定在这台机器上,因为我将它从我们的“生产”机器复制到这台机器上,看看我是否可以将它配置为运行,所以如果有意义的话,它是在开发机器上生产的吗? :)
    • 它被称为 purge_old_pickups.rb - 大概是这个应用程序的自定义文件。
    【解决方案2】:

    如果您有 ssh 访问权限,可能只需要从应用根目录运行 touch tmp/restart.txt

    PROJECTDIR/tmp/restart.txt

    您可以通过任何文本编辑器在您的 FTP 服务器上打开 tmp/restart.txt,然后按 Ctrl+S(保存),这样文件将被触摸并重新启动服务器

    或者如果你有 ssh 访问运行

    从您的 Rails 应用根目录中触摸 tmp/restart.txt


    ---编辑---

    抱歉没有看到你说你重启机器的部分。更有可能是资产管道的问题。

    尝试删除公共/资产

    然后运行

    捆绑 exec rake 资产:预编译

    我想有一个命令可以清除并重新编译,但我不记得了

    此外,如果这些答案没有帮助,了解您实际编辑的内容以及如何编辑可能会有所帮助。是css吗?标记?控制器?

    【讨论】:

    • 您好,感谢您的建议。我删除了 public/assets 并运行了预编译,然后我重新启动了机器,仍然没有更新。我正在编辑的文件位于 config 文件夹中,位于名为 initializers 的子文件夹中。该文件很简单,只有三个单独的 if 语句来处理调度某些操作。我只更改了安排这些操作的时间间隔。
    • initializers 子目录中的文件名是什么。有一些 ruby​​ 脚本会触发 cronjobs,例如需要运行控制台命令
    • 它被称为 purge_old_pickups.rb - 大概是这个应用程序的自定义文件。
    • 发布这个文件的代码,我相信人们会能够提供帮助。
    • 我正在更改一行。 if (Time.now - p.created_at)/60 > 5 && p.status == "Open"if (Time.now - p.created_at)/60 > 2 && p.status == "Open" 只需将间隔从 5 更改为 2。该行位于 config/initializers 中的 purge_old_pickups.rb 文件中。它是一个 30 行的小文件,用于调度页面的刷新率,以及它在 SQLite db 中存储信息的时间。代码按预期工作,在我进行更改之前,但之后它不会更改为 2 分钟。
    【解决方案3】:

    使用 Capistrano 软件部署 Rails 应用程序很常见。如果您找到文件app/Capfileapp/config/deploy.rb,那么您的应用程序正在使用它。 Capistrano 的典型工作流程是

    • 从源代码控制存储库获取应用程序的本地副本(例如,使用来自 GitHub 的 git clone
    • 在本地编辑文件(并进行测试,但您可能不在)
    • 提交并推送到源代码管理
    • 运行cap deploy 来做所有可能需要的事情,例如。重新编译资产

    capistrano 的作用(在最基本的用法中)是:

    • your-app-name/releases/<date-filename>/中创建一个子目录
    • 从源代码控制存储库中获取最新代码到该目录(例如git pull
    • your-app-name/current 中的符号链接替换为指向新目录的符号链接
    • 重启服务器(如果使用 Phusion Passenger,touch your-app-name/current/tmp/restart.txt 可以解决问题,否则,您可能需要重启网络服务器

    正如另一个答案中所述,对“资产”(CSS、JS、图像)的更改需要重新编译。我认为从<your-app-name> 子目录运行bundle exec rake assets:precompile 就足够了,但如果事情搞砸了,请先运行bundle exec rake assets:clean

    在某些情况下,capistrano 和源代码控制设置为要求部署使用执行部署的用户的本地凭据——ssh-agentssh-add 命令支持这一点。如果您的源代码控制系统不允许直接从服务器访问,您将需要这些(如果这是设置方式,您将在 app/config/deploy.rb 中看到一行 ssh_options[:forward_agent] = true)。

    当然,根据您的环境,可能还有许多其他依赖项需要管理。如果您甚至有一个远程高级环境,您应该找出如何正确部署的工作,可能使用 capistrano。

    【讨论】:

    • 嗨,汤姆,感谢您的帮助。 Capistrano 当前未配置。我安装了它,但我仍然在挣扎。在创建 GitHub 帐户、安装 Git 并选择存储库后,我有点迷失了……我还没有这些,只是在本地网络上运行的应用程序的本地副本。我不知道我是否应该创建一个存储库,因为我没有编写应用程序。我还不完全清楚 GitHub 是如何工作的。 :(
    • 哦,我的...忘记 capistrano 和 github!对不起,我真的没有比已经说过的更多了。
    • 我需要学习,我会的!谢谢你的帮助。我有点震惊,对本质上只是一个小网站的东西做出如此简单的改变是如此困难。到目前为止,我在 PHP 中需要几秒钟的时间已经花费了几个小时。再次感谢您的宝贵时间,此资源非常宝贵。
    【解决方案4】:

    这是我最后必须做的,我意识到这不是你使用 Rails 的方式..

    我备份了应用程序目录,重新映像了我用来测试它的开发机器。根据http://rubyonrails.org/download 执行了 Ruby on Rails 的全新安装。我创建了一个新的同名空应用程序,然后将我正在使用的应用程序的内容复制到新的应用程序框架中,选择不覆盖任何现有文件。然后我安装了Passenger并作为一个独立的运行它。这让我的应用程序再次启动并运行,现在当我对 config/initializers 中的文件进行任何更改时,它们会在我重新启动乘客时反映出来。所以我可以走了。

    现在我需要学习如何真正做到这一点。谢谢大家。

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2013-03-06
      • 2013-07-28
      • 1970-01-01
      相关资源
      最近更新 更多